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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我不能将String转换为char并直接在Switch Statement中使用?相关的知识,希望对你有一定的参考价值。

为什么我不能将String转换为char并在Switch语句中使用&如果我将其保留为字符串,则switch语句不会接受它要么告诉我它需要是int还是字节或短!

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();
    }
}
答案

你可以在String表达式中使用case,不需要char。改变c就像

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

你的代码会起作用。或者,修改您的case语句以使用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;
}
另一答案

您可以使用char字面值:

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

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

另一答案

尝试下面的代码,它将执行

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 '+':而不是比较String case "+":另外检查您的Java版本,从JDK v1.7开始,您将允许您在switch语句中使用Strings,就像您在代码片段中所做的那样。如果您正在寻找其他解决方案,请告诉我

另一答案

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

以上是关于为什么我不能将String转换为char并直接在Switch Statement中使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何将一个char数组转化为string

如何将字符串转换为char矩阵

java中如何将char数组转化为String?

不能在 C 中将 sscanf() 用于 char 数组

在Qt中如何将QString转换为const char*

C++ 我将一个const char*的字符串转换为string出错