出现错误:不兼容的类型:当我尝试执行此操作时,boolean无法转换为java.lang.String(错误与**一致):
...
case("division"):{
System.out.println("Enter first number to find quotient: ");
num1 = scan.nextDouble();
System.out.println("Enter second number to find quotient: ");
num2 = scan.nextDouble();
System.out.println("Quotient is " + (num1 / num2));
break;
}
**case(!ask.equals("addition") || !ask.equals("subtraction") || !ask.equals("multiplication") || !ask.equals ("division")): {**
System.out.println("User input is not valid. Please specify what kind of operation you want to perform on 2 numbers: addition, subtraction, multiplication, or division. Type 'terminate' to terminate this program.");
答案 0 :(得分:3)
由于
!ask.equals("addition") || !ask.equals("subtraction") || !ask.equals("multiplication") || !ask.equals ("division")
当需要String
时,产生布尔。
对字符串执行switch-case
时,每个案例的括号中都必须包含值String
。
相反,你应该这样做:
case ("addition") :{}
case ("subtraction") :{}
case ("multiplication") :{}
case ("division") :{
System.out.println("User input is not valid. Please specify what kind of operation you want to perform on 2 numbers: addition, subtraction, multiplication, or division. Type 'terminate' to terminate this program.");
break;
}
default: {
break;
}
在上面的场景中,如果您switch
的字符串等于addition
,subtraction
或multiplication
,则它会一直循环直到division
这就是执行所需代码的地方
答案 1 :(得分:2)
每当您撰写switch
语句时,都应将default:
作为最后一种情况。这只是意味着"如果没有其他条件是真的那么这样做"。这就是你想要的。
switch(ask) {
case "addition":
// do something
break;
case "subtraction":
// do something
break;
case "multiplication":
// do something
break;
case "division":
// do something
break;
default:
// do something
}
顺便提一下,如果您确实希望ask
的布尔表达式不是"addition", "subtraction", "multiplication", "division"
,那么您希望在类似的表达式中使用&&
而不是||
(!ask.equals("addition") && !ask.equals("subtraction") && !ask.equals("multiplication") && !ask.equals ("division")
因为
(!ask.equals("addition") || !ask.equals("subtraction") || !ask.equals("multiplication") || !ask.equals ("division"))
无论true
是什么,总是ask
。
答案 2 :(得分:0)
switch(string){
case string : ...
}
在您的示例中,您的switch case检测字符串值,但表达式(!ask.equals("addition") || !ask.equals("subtraction") || !ask.equals("multiplication") || !ask.equals ("division")):
生成布尔结果。
不要将表达式放在switch case中,把你想要匹配的字符串,你在if
条件中使用的表达式切换。
要匹配您可以执行的多个条件,
case ("addition") :
case ("subtraction") :
case ("multiplication") :
case ("division") :
System.out.println("Here your all condition get match, now do expected here");
break;
default: {
break;
}
答案 3 :(得分:0)
@ Victor2748提供的理由是正确的。但是,我发现当用户输入的字符串不是加法,减法,乘法和除法时,你想要产生那个特殊的字符串输出。所以代码看起来不像他的建议,而是看起来像这样。
...
case("division"): {}
default: System.out.println("User input is not valid. Please specify what kind of operation you want to perform on 2 numbers: addition, subtraction, multiplication, or division. Type 'terminate' to terminate this program.");
在switch
语句中,default
仅在不能执行其他case
时执行。 default
与else
中的if-else
类似。就像else
仅在第一个if
和后续else if
语句无法执行时执行一样,default
只有在case
语句都不能执行时才有效被执行。声明
!ask.equals("addition") || !ask.equals("subtraction") || !ask.equals("multiplication") || !ask.equals ("division")
是多余的。
希望这有帮助!