【问题标题】:The method parseInt(String) in the type Integer is not applicable for the arguments (boolean)Integer 类型中的方法 parseInt(String) 不适用于参数(布尔值)
【发布时间】:2017-03-16 19:43:28
【问题描述】:

我收到错误Integer 类型中的方法 parseInt(String) 不适用于参数(布尔值)

这里是代码

} else if (Integer.parseInt(answerField.getText() == null)) {
                    JOptionPane.showMessageDialog(null, "You did not enter an answer!");
                }

我也试过了,但是不行:

(Integer.parseInt(answerField.getText().equals("")))

&

(Integer.parseInt(answerField.getText().length()) == 0)

我只想检查是否没有输入任何内容,如果是,则显示一个 JOptionPane。

编辑:var answerField 是一个 JTextField,用户在其中输入数学问题的答案。所以 ActionListener 然后确定答案是否正确,因此 parseInt (因为它是一个数学运算)

do {
        checkButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (Integer.parseInt(answerField.getText()) == correctAnswer) {
                    count++;
                    JOptionPane.showMessageDialog(null, "Correct");

                } else if (Integer.parseInt(answerField.getText().length()) == 0) {
                    JOptionPane.showMessageDialog(null, "You did not enter an answer!");
                } else {
                    count++;
                    JOptionPane.showMessageDialog(null, "Incorrect!");
                    System.exit(0);
                }
            }
        });
    } while (count < 11);

【问题讨论】:

  • 您正在将一个布尔表达式传递给 parseInt(),它需要一个字符串。不要试图在一行中做所有事情。检查字符串是否为空/null,然后解析它(如果需要解析)。但鉴于你所说的,你所需要的只是if (answerField.getText().isEmpty())
  • * 为什么要使用 Integer.parseInt() ?为了检查是否有文本,您需要使用此 `if (answerField.getText() == null || answerField.getText().equals(""))
  • 注意,如果 answerField 是 JTextField 或 JTextArea,它的 getText() 方法永远不会返回 null。
  • 我不太熟悉 Java,但我知道在进行类型转换时可以使用强制转换语法,它可能对您有所帮助..

标签: java


【解决方案1】:

让我们分析你的代码

(Integer.parseInt(answerField.getText() == null))

参数

answerField.getText() == null

返回一个布尔值,并且方法 Integer.parseInt(bool) 未在 Integer 类中定义。

看起来你想做:

else if (someConditionHere) {
      Integer.parseInt(answerField.getText());
      JOptionPane.showMessageDialog(null, "You did not enter an answer!");
}

【讨论】:

    【解决方案2】:

    您的 parse int 方法中的所有值都返回一个布尔值,因为它们正在执行两个值之间的比较,结果为真或假。您应该使用 Boolean.parseBoolean() 返回“true”或“false”字符串

    【讨论】:

      【解决方案3】:

      Integer.parseInt(answerField.getText() == null) 被评估为 Integer.parseInt("someTextext" == null)然后

      Integer.parseInt(true/false)
      

      尝试将布尔值解析为整数将导致错误

      要检查你的字段是否为空,只做if(answerField.getText() == null)

      如果不为空,您可以尝试按照您的方式将字段值解析为整数。

      【讨论】:

        【解决方案4】:

        我不确定你为什么要调用 Integer.parseInt,因为你的条件中已经有一个布尔表达式:

        } else if (answerField.getText() == null) {
            JOptionPane.showMessageDialog(null, "You did not enter an answer!");
        }
        

        请注意,如果 Java 中的条件只能接受布尔表达式,并且您不能传入整数或其他任何您认为是 truthyfalsy 的东西(例如,与 C 或 Javascript 不同)。

        【讨论】:

          【解决方案5】:

          如果all你想做的是检查answerField中是否包含一些字符串,那么你需要做的就是检查它是否不为null或为空。

          if(!("".equals(answerField.getText()) || null == answerField.getText()) {
              // other, non-integer-handling code here
          }
          

          如果存在空字符串或null,您确实想要处理整数解析,因为这可能会导致NullPointerException

          【讨论】:

            猜你喜欢
            • 2013-08-12
            • 2015-03-09
            • 1970-01-01
            • 1970-01-01
            • 2015-05-25
            • 2011-12-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多