2014-03-13 3 views
-1

Я пытаюсь создать преобразователь температуры в 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); 
    } 
} 
+1

это выглядит, как вы сравниваете символ на символ - глупости неправильно я думаю. –

+0

Попробуйте equals() нормальный java, сравнивающий кошмар – rekire

+1

@rekire Примитивы не имеют метода 'equals' - они не являются объектами – MadProgrammer

ответ

1

пожалуйста, попробуйте сделать вашу функцию следующим образом:

public static String getOutput(char units, double degrees) { 
    if ((units == 'F') || (units == 'f')) 
    { 
     String output = " "; 
     output = degrees + " degrees F = " + convertToCelsius(degrees) + " degrees Celsius."; 
     return output; 
    } 
    else if ((units) == 'C' || (units) == 'c') 
    { 
     String output = " "; 
     output = degrees + " degrees C = " + convertToFahrenheit(degrees) + " degrees Fahrenheit."; 
     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 ""; 
    } 

он прошел тест на моем компьютере ..

надеюсь, что это помогает ..

+0

Да, спасибо. Это сработало отлично. Будет проверять, что я не делаю правильно. – Germblaster

+1

Добро пожаловать .. вы определенно узнали _a lot_ сегодня .. не спешите и не организуйте свой вопрос .. =) –

1

Вы не сравнивающие строки с гольцов. У вас есть это:

if ((units == 'F') || (units == 'f')) 

Но 'F' (в одинарных кавычках) является характер буквальным, а не строка. Если бы это было "F" (двойные кавычки), то это будет строка:

char a = 'F';  // <- this is a character 
String b = "F"; // <- this is a string 
char c = 'XYZ'; // <- this is invalid code! 
String d = "XYZ"; // <- this is a string 

Я думаю, вы получаете путать о 'F' - это символ, а не строка. Таким образом, ваш код выглядит отлично.

2

Ваша проблема заключается не в сравнении строк и символов, а в том, что ожидаемый результат не соответствует данному выходу.

Вам нужно добавить дополнительный «guff» в ожидаемом ответе на результат вывода.

Добавьте помеченные строки (**) для филиала и аналогичного кода 'F' в отделении 'C'

if ((units == 'F') || (units == 'f')) { 
    **String tempType = "Fahrenheit";** 
    String output = " "; 
    output = degrees + " F = " + convertToCelsius(degrees); 
    **output = output + " degrees " + tempType** 
    return output; 
Смежные вопросы