为什么这个Java代码会抛出NumberFormatException?

时间:2011-11-10 18:40:19

标签: java swing parseint

我正在玩一个使用JTextFieldsgridArray)数组进行显示的GUI数独求解器和一个用于实际的int数组(sudokuGrid)求解。当我运行它并尝试将JTextField string强制转换为int时,会在NumberFormatException解析string时抛出int {{1} s,特别是这条消息:

java.lang.NumberFormatException: For input string: ""

以下是导致我麻烦的代码部分:

// create solveButton
    solveButton = new JButton("Solve It!");
    solveButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                // create grid and call Solve()
                for(int i=0;i<9;i++) {
                    for(int j=0;j<9;j++) {
                        if (gridArray[i][j].getText() == "")
                            {sudokuGrid[i][j] = 0;}
                        else {sudokuGrid[i][j] = Integer.parseInt(gridArray[i][j].getText());}
                    }
                } // end for loop

                Solver(sudokuGrid);

                // display solution
                for(int i=0;i<9;i++) {
                    for(int j=0;j<9;j++) {
                        gridArray[i][j].setText(String.valueOf(sudokuGrid[i][j]));
                    }
                } // end for loop
            } catch (NumberFormatException e) {
                JOptionPane.showMessageDialog(mainFrame,e.toString(),"Number Format Exception",JOptionPane.ERROR_MESSAGE);
            } catch (Exception e) {
                JOptionPane.showMessageDialog(mainFrame,"Sorry, something broke, try again.","Solve Error",JOptionPane.ERROR_MESSAGE);
            } // end try-catch
        } // end actionPerformed()
    }); // end solveButton ActionListener

我认为if - else会抓住空字段,只有在存在值的情况下才会尝试parseInt,但如果有人可以启发我,我会很感激

5 个答案:

答案 0 :(得分:2)

您正在使用==检查字符串相等性,这仅用于引用相等性。也许你打算写:

gridArray[i][j].getText().equals("")

答案 1 :(得分:2)

你的问题在这里:

  if (gridArray[i][j].getText() == "")

您不能以这种方式比较字符串。这样做是这样的:

if (gridArray[i][j].getText().equals("")) 

答案 2 :(得分:1)

不要向TextArea询问它的文本,因为这可能仍然在编辑过程中。检查基础文档本身。

Document document = gridArray[i][j].getDocument();
sudokuGrid[i][j] = document.getLength() == 0 ? 0 : Integer.parseInt(document.getText(0, 1);

另外......为什么选择JTextArea?为什么不是JTextField?你甚至可以将它与一个JSpinner结合起来,其值为0(inerpreted为 empty 为9。

答案 3 :(得分:0)

使用== - 比较字符串并不意味着检查文本的相等性(字符串内容),而是检查字符串对象的相等性(测试它们是完全相同的OBJECT)。改为使用String.equals()。

答案 4 :(得分:0)

问题是你的平等检查:

gridArray[i][j].getText() == ""

这不符合您的意图。在Java中,它检查两个字符串是否是同一个对象,而不是它们的值是否相等。 您应该使用String.equals()方法来评估文本字段是否为空。