不兼容的操作数类型 Scanner 和 String?

Incompatible operand types Scanner and String?

提问人:Jeseca Z 提问时间:6/24/2022 最后编辑:user207421Jeseca Z 更新时间:6/24/2022 访问量:542

问:

我不断收到以下错误:

  • 不兼容的操作数类型扫描仪 和 String
  • 不兼容的操作数类型 int 和 字符串 在我添加 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));
            }
        }
        
     
        
    }   
    }
}

    ```
java 字符串 编译器错误 switch-statement java.util.scanner

评论

3赞 user207421 6/24/2022
请提供确切的错误消息,并指出它出现在哪一行和哪一列。但是你似乎把你的变量和你的变量混为一谈。一旦您了解了操作员,您就不需要再做一次测试:它会带您到正确的地方。opScannercase

答:

5赞 Kaan 6/24/2022 #1

您已经用以下行定义了一个 :inputScanner

Scanner input = new Scanner(System.in);

然后,您可以使用 to 执行扫描程序操作,就像您在此处执行的操作一样:input

x = input.nextInt();

目前为止,一切都好。

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

if (input == "s") {
    ...
}

这是无效的。Java 编译器告诉你,它不允许你用来比较 a(即 )和 String(在本例中为 “s”)。编译器给你一个错误,说:不允许。==Scannerinputinput == "s"

目前尚不清楚您的意图是什么(即您希望代码的实际行为方式),但问题肯定出在这三个语句上。每个人都试图将 a 与 a 进行比较(一个是“s”,一个是“a”,最后一个是“m”)。因此,您需要修复这些问题才能执行您尝试执行的任何操作。ifjava.util.Scannerjava.lang.String

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

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