扫描仪和字符串操作数类型不兼容?

Jes*_*a Z 1 java string compiler-errors switch-statement java.util.scanner

我不断收到以下错误:

  • 扫描仪和字符串不兼容的操作数类型
  • 不兼容的操作数类型 int 和 String 在我添加 int op = Integer.valueOf(operator) 行之前,当我命名我的情况时,它一直给我错误。我还很新,这是我为我的课程编写的第二个代码,所以如果可能的话,请保持解释简单(如果对此有任何困惑,这里还没有显示一个计算器类):
//change the package name to calculatorClass///////////////

import java.util.Scanner;

public class assignmentB {

    public static String String(int y,int x, String name, String str) throws Exception {
        if (y < 1)
            throw new Exception("Value must be larger than 0.");
        if (x < 1)
            throw new Exception("Value must be larger than 0");
        return name;
        
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Calculator c1 = new Calculator();
        Scanner input = new Scanner(System.in);
        c1.name = "The total is $";
    
try {
    }   catch (Exception e1){
        System.out.println(e1);
    }
    {
        
        int x, y, s, a, m;
        String name1;
        
        
        System.out.println("Red River College");
        System.out.println("Custom Calculator");
        
        System.out.println("Enter first value: ");
        x = input.nextInt();
        
        System.out.println("Enter second value: ");
        y = input.nextInt();
        
        System.out.println("Enter operation(a=Add, s=Subtract, m=multiply): ");
        String operator = input.nextLine();
        int op =Integer.valueOf(operator);
        
        switch (op) {
        case 1:
            if (input == "s") {
            System.out.println(c1.name + c1.subtract(x,y));
            }
        case 2:
            if (input == "a") {
            System.out.println(c1.name + c1.add(x,y));
            }
        case 3:
            if (input == "m") {
            System.out.println(c1.name + c1.multiply(x,y));
            }
        }
        
     
        
    }   
    }
}

    ```
Run Code Online (Sandbox Code Playgroud)

kaa*_*aan 5

您已使用以下行定义input为 a :Scanner

Scanner input = new Scanner(System.in);
Run Code Online (Sandbox Code Playgroud)

然后您可以用来input执行扫描仪操作,就像您在这里所做的那样:

x = input.nextInt();
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好。

但稍后在代码中,您将执行此操作(以及一些类似的变体):

if (input == "s") {
    ...
}
Run Code Online (Sandbox Code Playgroud)

这是无效的。Java 编译器告诉您,它不允许您使用==a Scanner(即input)与 String(在本例中为“s”)进行比较。编译器给你一个错误:input == "s"不允许。

目前尚不清楚您的意图是什么(即您希望代码实际表现如何),但问题肯定出在这三个if语句上。每个人都试图将 ajava.util.Scanner与 a进行比较java.lang.String(一个是“s”,一个是“a”,最后一个是“m”)。因此,您需要修复这些问题才能完成您想要做的任何事情。

作为猜测,也许您想从扫描仪读取新的字符串输入,然后将其与“s”等进行比较?如果是这样,情况可能如下所示。请注意,要比较字符串,您应该使用equals()不要用于==比较字符串或任何其他对象)。

String newString = input.next();
switch (op) {
    case 1:
        if (newString.equals("s")) {
            System.out.println(c1.name + c1.subtract(x, y));
        }
    ...
}
Run Code Online (Sandbox Code Playgroud)