我已经'完成'将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;
}
}
}
答案 0 :(得分:5)
!type.equals("F") || !type.equals("f")
这总是如此。为什么?这意味着“如果类型不是F或类型不是f”。有三种情况:
false || true == true
true || false == true
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)) { ... }