【问题标题】:Type mismatch: cannot convert from Scanner to boolean类型不匹配:无法从 Scanner 转换为布尔值
【发布时间】:2014-01-17 01:37:54
【问题描述】:

我正在制作一个基本的货币转换器,它需要用户选择货币并转换金额,显然还没有完成,因为我遇到了这个问题。帮助和指点将不胜感激。

import java.util.Scanner;

class Converter {
    public static void main(String args[]){
        double PLN;
        double GDP;
        System.out.println("Which currency do you wish to convert?");
        System.out.println("Press a corresponding number");
        System.out.println("1. Great British Pound (GDP) £");
        System.out.println("2.Polish zloty (PLN) zl");

        Scanner option = new Scanner(System.in);

        if (option = 1){            

        }       
    }   
}

错误

线程“main”java.lang.Error 中的异常:未解决的编译问题: 类型不匹配:无法从 Scanner 转换为布尔值 类型不匹配:无法从 int 转换为 Scanner 在 Converter.main(Converter.java:14)

【问题讨论】:

    标签: java


    【解决方案1】:

    应该更像

    Scanner option = new Scanner(System.in);
    String userInput = option.nextLine();
    
    if (userInput.equals("1")){            
        // ...
    }
    

    这里有一些问题:

    1. 相等性测试是==,而不是=。您正在尝试将 1 分配给 Scanner 对象。
    2. Scanner 本身实际上并不是一个字符串。你需要拨打readLine就可以了。
    3. 即使Scanner 是一个字符串,您也无法将Stringint 进行比较。
    4. 您需要将.equals 用于字符串,因为Java 中的== 总是按引用 进行比较,而不是按值进行比较。 == 基本上的意思是“这两个对象完全相同的对象”,而不是“这两个对象看起来一样吗。”

    另一种方法是使用nextInt

    Scanner option = new Scanner(System.in);
    
    while (!option.hasNextInt()) {
        System.out.println("Bad input"); // print an error message
        option.nextLine(); // clear bad input
    }
    int userInput = option.nextInt();
    if (userInput == 1) {
        // ...
    }
    

    另请注意,您可以在以下情况下使用switch 语句:

    int userInput = option.nextInt();
    switch(userInput) {
    case 1:
        // the user input was 1
        break;
    case 2:
        // it was 2
        break;
    // ...
    default:
        // it was not any of the cases
    }
    

    您可以在字符串上使用switches,但只能在 Java 7 或更高版本中使用。

    【讨论】:

    • @SLaks 哎呀,我的 JS 和 Ruby 太多了 ;)
    • 我喜欢与您的示例相关的第三点,因为您使用 readLine 因为他可以使用 nextInt 而第 3 点毫无意义
    【解决方案2】:

    你可以....改变你的初始条件:

    if (option = 1) //??
    

    到这里:

    System.out.println("Enter int: ");
    if ((option.nextInt()) == 1)
    //do something
    

    【讨论】:

    • 最好将nextXXX 的结果存储在某处,以防有更多ifs 使用用户数据。否则每个ifs 都会要求用户输入。
    猜你喜欢
    • 1970-01-01
    • 2012-03-05
    • 2012-06-20
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 2021-07-29
    相关资源
    最近更新 更多