【问题标题】:!string.equals(string) turns false result!string.equals(string) 结果为假
【发布时间】:2021-09-04 11:41:24
【问题描述】:

在我的程序的一部分中,我放置了一个 while 循环来反复询问输入。有一个选项可以输入字母“F”并中断循环。 这是我的程序:

public class Example {
    public static void main(String[] args) {
        int x = 0;
        ArrayList Numbers = new ArrayList();
        while (x==0) {
            System.out.println("Type your number:");
            Scanner s = new Scanner(System.in);
            if (s.equals("f") || s.equals("F")) {
                x = 1;
            }
            else if (!s.equals("f") && !s.equals("F")) {
                int n = Integer.parseInt(s.next());
                Numbers.add(n);
            }
        }   
    }
}

当我运行程序时,我输入一些数字,然后输入“F”。我看到了这个错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "F"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at Example.main(Example.java:13)

我相信字符串“F”可以通过我的else if,但我不知道为什么。我该如何解决这个问题?

【问题讨论】:

  • 在代码中,您不会将StringString 进行比较,而是将ScannerString 进行比较。这将始终返回 false
  • @Turing85 将 Scanner 转换为字符串的最佳方法是什么?
  • else后面的条件不需要了,因为你已经检查了字符是否为“f”,所以当它为假时调用else条件。但是,这假设您检查的是 String 而不是 Scanner。

标签: java string if-statement java.util.scanner


【解决方案1】:

您不能直接将扫描仪对象与字符串进行比较。您需要使用扫描仪获取一些输入,然后您可以将该输入与其他类型进行比较。 尝试运行此代码。

public class Example {

public static void main(String[] args) {
    int x = 0;
    ArrayList Numbers = new ArrayList();
    Scanner sc = new Scanner(System.in);

    while (x==0) {
        System.out.println("Type your number:");
        String s = sc.nextLine();
        if (s.equals("f") || s.equals("F")) {
            x = 1;
        }
        else if (!s.equals("f") && !s.equals("F")) {
            int n = Integer.parseInt(s.next());
            Numbers.add(n);
        }
    }
    
}}

【讨论】:

    【解决方案2】:

    您正在将字符串与 Scanner obj 进行比较。让我们看看扫描器对象在 java 中是如何工作的。

    Scanner myObj = new Scanner(System.in);
    String myInput = myObj.nextLine();  // Read user input
    

    然后您可以将您的myInput 与字符“f”或“F”进行比较

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多