如果声明比较字符串

时间:2014-02-21 02:08:10

标签: java

我已经'完成'将Celcius转换为Fahrenheit的程序,反之亦然,这是典型的初学者。

然而,即使条件不满足,我的if语句总是会激活,而且我几乎肯定我有正确的语法!=因为它与字符串有关,但程序仍会打印if语句的打印行而不管我输入的内容。

import java.util.Scanner;

    public class TemperatureConverter {

    public static void main(String[] args) {

      double temp = 0.0;

      Scanner in = new Scanner(System.in);

      System.out.printf("Please enter the type of temperature conversion you need to perform: ");
      String type = in.nextLine();

      if (!type.equals("F") || !type.equals("f") || !type.equals("C") || !type.equals("c")){
                System.out.println("Invalid conversion, must supply either C or F, program will exit");
                System.exit(0); }

        switch (type) {
            case "F":
                System.out.printf("\nPlease enter the temperature to be converted to Celsius: ");
                temp = in.nextDouble();
                double fToC = (temp - 32.0) * 5.0 / 9.0;
                System.out.printf ("\nThe equivalent temperature in Celsius is %.3f\n", fToC);
                break;

            case "f":
                System.out.printf("Please enter the temperature to be converted to Celsius: ");
                temp = in.nextDouble();
                fToC = (temp - 32.0) * 5.0 / 9.0;
                System.out.printf ("\nThe equivalent temperature in Celsius is %.3f\n", fToC);
                break;

            case "C":
                System.out.printf("Please enter the temperature to be converted to Fahrenheit: ");
                temp = in.nextDouble();
                double cToF = (temp * 9.0 / 5.0) + 32;
                System.out.printf ("\nThe equivalent temperature in Fahrenheit is %.3f\n", cToF);
                break;

           case "c":
                System.out.printf("Please enter the temperature to be converted to Fahrenheit: ");
                temp = in.nextDouble();
                cToF = (temp * 9.0 / 5.0) + 32;
                System.out.printf ("\nThe equivalent temperature in Fahrenheit is %.3f\n", cToF);
                break;
        }

    }

}

5 个答案:

答案 0 :(得分:5)

!type.equals("F") || !type.equals("f")

这总是如此。为什么?这意味着“如果类型不是F或类型不是f”。有三种情况:

  • 类型等于“F”,类型不等于“f”。 false || true == true
  • 类型不等于“F”,类型等于“f”。 true || false == true
  • 类型不等于“F”,类型不等于“f”。 true || true == true

如果类型同时是“f”和“F”,这将是错误的,这是不可能的。

您想使用&&代替||。或者,继续使用||,但移动!,如下所示:

if (!(type.equals("F") || type.equals("f") || type.equals("C") || type.equals("c")))

这可能更接近于你在编写if语句时的想法。

此外,您可以通过使用equalsIgnoreCase而不是同时检查大写和小写版本来缩短它。

答案 1 :(得分:1)

对于If条件,你可以简单地写:

if (!(type.toLowerCase().equals("f") ||type.toLowerCase().equals("c")))

 if (!(type.toLowerCase().equals("f") ||type.toLowerCase().equals("c"))){
            System.out.println("Invalid conversion, must supply either C or F, program will exit");
          System.exit(0); 
  }

  else{
// switch cases

答案 2 :(得分:0)

!type.equals("F") || !type.equals("f") || !type.equals("C") || !type.equals("c") 这将永远回归真实; 您应该将||更改为&&

答案 3 :(得分:0)

if (!type.equals("F") || !type.equals("f") || !type.equals("C") || !type.equals("c"))

简单地添加一个括号(在!类型之间)以使“not”分配给每个变量。

if (!(type.equals("F") || !type.equals("f") || !type.equals("C") || !type.equals("c"))) 

答案 4 :(得分:0)

一个简单的替代方法是使用String的contains()方法:

if (!"CcFf".contains(type)) { ... }