Java:"如果用户没有输入X,Y,Z,请执行此操作"

时间:2015-01-10 04:29:04

标签: java

出现错误:不兼容的类型:当我尝试执行此操作时,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.");

4 个答案:

答案 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的字符串等于additionsubtractionmultiplication,则它会一直循环直到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时执行。 defaultelse中的if-else类似。就像else仅在第一个if和后续else if语句无法执行时执行一样,default只有在case语句都不能执行时才有效被执行。声明

!ask.equals("addition") || !ask.equals("subtraction") || !ask.equals("multiplication") || !ask.equals ("division")是多余的。

希望这有帮助!