Я пытаюсь создать преобразователь температуры в java, используя 3 функции для преобразования Fahrenheit, Цельсия и распечатку результатов. Код работает, но по причине я сравниваю String с Char, делая выражение никогда не равным. Я действительно смущен этим. Пожалуйста, мне нужна ваша помощь, спасибо.Сравнение строки с char
TemperatureConverter:
import java.util.*;
public class TemperatureConverter {
public static double convertToCelsius(double degrees){
double celsius = (5*(degrees - 32)/9);
return celsius;
}
public static double convertToFahrenheit(double degrees){
double fahrenheit = (9*(degrees/5) + 32);
return fahrenheit;
}
public static String getOutput(char units, double degrees) {
if ((units == 'F') || (units == 'f'))
{
String output = " ";
output = degrees + " F = " + convertToCelsius(degrees);
return output;
}
else if ((units) == 'C' || (units) == 'c')
{
String output = " ";
output = degrees + " C = " + convertToFahrenheit(degrees);
return output;
}
if(!(units == 'F' || units == 'f' || units == 'C' || units == 'c'))
{
String output = ("Unknown units - cannot do calculation\n" +
" - next time enter either \'F\' for Fahrenheit or \'C\' for Celsius.");
return output;
}
return "";
}
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
double degrees;
char units;
System.out.println("Enter a temperature in degrees (for example 29.6): ");
degrees = keyboard.nextDouble();
System.out.println();
System.out.println("Enter 'F' (or 'f') for Fahrenheit or 'C' (or 'c') for Celsius: ");
units = keyboard.next().charAt(0);
System.out.println(getOutput(units, degrees));
}
}
TemperatureConverterTest:
import junit.framework.TestCase;
/**
* A JUnit test case class.
* Every method starting with the word "test" will be called when running
* the test with JUnit.
*/
public class TemperatureConverterTest extends TestCase {
public static final double EPSILON = 0.0001;
public void testConvertToCelsius() {
assertEquals(0.0, TemperatureConverter.convertToCelsius(32), EPSILON);
assertEquals(100, TemperatureConverter.convertToCelsius(212), EPSILON);
assertEquals(-17.7777777778, TemperatureConverter.convertToCelsius(0), EPSILON);
assertEquals(-40, TemperatureConverter.convertToCelsius(-40), EPSILON);
}
public void testConvertToFahrenheit() {
assertEquals(32, TemperatureConverter.convertToFahrenheit(0), EPSILON);
assertEquals(100, TemperatureConverter.convertToFahrenheit(37.7777778), EPSILON);
assertEquals(0, TemperatureConverter.convertToFahrenheit(-17.7777778), EPSILON);
assertEquals(-40, TemperatureConverter.convertToFahrenheit(-40), EPSILON);
}
public void testGetOutput() {
String output = TemperatureConverter.getOutput('C', 0.0);
assertEquals("User inputs 'C' and 0.0 degrees", "0.0 degrees C = 32.0 degrees Fahrenheit.", output);
output = TemperatureConverter.getOutput('c', 0.0);
assertEquals("User inputs 'c' and 0.0 degrees", "0.0 degrees C = 32.0 degrees Fahrenheit.", output);
output = TemperatureConverter.getOutput('F', 0.0);
assertEquals("User inputs 'F' and 0.0 degrees", "0.0 degrees F = -17.77777777777778 degrees Celsius.", output);
output = TemperatureConverter.getOutput('f', 0.0);
assertEquals("User inputs 'f' and 0.0 degrees", "0.0 degrees F = -17.77777777777778 degrees Celsius.", output);
output = TemperatureConverter.getOutput('m', 0.0);
assertEquals("User inputs 'm' and 0.0 degrees", "Unknown units - cannot do calculation\n" +
" - next time enter either 'F' for Fahrenheit or 'C' for Celsius.", output);
}
}
это выглядит, как вы сравниваете символ на символ - глупости неправильно я думаю. –
Попробуйте equals() нормальный java, сравнивающий кошмар – rekire
@rekire Примитивы не имеют метода 'equals' - они не являются объектами – MadProgrammer