为什么我不能将String转换为char&直接在Switch Statement中使用?

时间:2017-12-27 00:50:39

标签: java string char switch-statement

为什么我不能将String转换为char&用于Switch Statement&如果我把它作为字符串保留,那么switch语句就不会接受它,要么告诉我它需要是int还是byte或short !!

public class Main {

    public static void main(String[] args) {
        String var1=getInput("enter first variable");
        String var2=getInput("enter second variable");
        String var3=getInput("enter opertaor");
        char c = var3.charAt(0);

        double d1=Double.parseDouble(var1);
        double d2=Double.parseDouble(var2);

        switch(c){
            case "+"://squiggly line appears & the bubble help says incompatible types
                System.out.println(d1+d2);
                break;
            case "-"://squiggly line appears & the bubble help says incompatible 
                System.out.println(d1-d2);
                break;
            case "*"://squiggly line appears & the bubble help says incompatible 
                System.out.println(d1*d2);
                break;
            case "/"://squiggly line appears & the bubble help says incompatible 
                System.out.println(d1/d2);
                break;
            default:
            System.out.println("Unrecognized operation");
            break;
        }
    }

    static String getInput(String prompt){
        System.out.println("prompt");
        Scanner sc=new Scanner(System.in);
        return sc.nextLine();
    }
}

4 个答案:

答案 0 :(得分:1)

您可以在String表达式中使用case,无需char。更改c,如

String c = var3.substring(0, 1);

您的代码可以使用。或者,修改您的案例陈述以使用char。像,

switch (c) {
case '+':
    System.out.println(d1 + d2);
    break;
case '-':
    System.out.println(d1 - d2);
    break;
case '*':
    System.out.println(d1 * d2);
    break;
case '/':
    System.out.println(d1 / d2);
    break;
default:
    System.out.println("Unrecognized operation");
    break;
}

答案 1 :(得分:0)

您可以使用字面文字:

  switch(c){
      case '+':
          System.out.println(d1+d2);
          break;
...

类型不同,因此您无法直接比较它们。它们碰巧在这种特殊情况下是可转换的,但一般情况下并非如此,因此编译器不能允许这样做。

答案 2 :(得分:0)

尝试以下代码并执行

public static void main(String[] args) {
    String var1 = getInput("enter first variable");
    String var2 = getInput("enter second variable");
    String var3 = getInput("enter opertaor");
    char c = var3.charAt(0);

    double d1 = Double.parseDouble(var1);
    double d2 = Double.parseDouble(var2);

    switch (c) {
        case '+':
            System.out.println(d1 + d2);
            break;
        case '-':
            System.out.println(d1 - d2);
            break;
        case '*': 
            System.out.println(d1 * d2);
            break;
        case '/': 
            System.out.println(d1 / d2);
            break;
        default:
            System.out.println("Unrecognized operation");
            break;
    }

}

static String getInput(String prompt) {
    System.out.println("prompt");
    Scanner sc = new Scanner(System.in);
    return sc.nextLine();

}

更改case '+':而不是比较字符串case "+":另外检查您的Java版本,从JDK v1.7开始,您可以在switch语句中使用字符串,就像在代码片段中一样。如果您正在寻找其他解决方案,请告诉我们

答案 3 :(得分:-1)

你无法将一个String解析为一个char,因为String很大而不适合。 可以把它想象成一个由多个字符组成的字符串,所以它就像一个字符串一样。