0

我正在玩一个 GUI 数独求解器,它使用JTextFields( ) 的数组gridArray进行显示,使用int数组 ( sudokuGrid) 进行实际求解。当我运行它并尝试将JTextField strings 转换为s 时,它会在将s解析为sint时抛出 a ,特别是以下消息:NumberFormatExceptionstringint

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存在值的情况下尝试,但如果有人能启发我,我将不胜感激。

4

5 回答 5

2

Your problem is here:

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

You can't compare strings that way. Do it this way instead:

if (gridArray[i][j].getText().equals("")) 
于 2011-11-10T18:43:47.953 回答
2

您正在使用 来检查字符串相等性==,这仅用于引用相等性。也许你的意思是写:

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

于 2011-11-10T18:43:11.040 回答
1

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

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

另外......为什么是JTextArea?为什么不是 JTextField?您甚至可以将其与值从 0 的 JSpinner (被解释为到 9)结合使用。

于 2011-11-10T18:54:20.357 回答
0

Using == -comparison with strings does not mean checking for equality of the text (string contents), but instead equality of the String-objects (testing are they the exact same OBJECT). Use String.equals() instead.

于 2011-11-10T18:43:39.553 回答
0

问题是你的平等检查:

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

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

于 2011-11-10T18:46:47.633 回答