我正在玩一个使用JTextFields
(gridArray
)数组进行显示的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
,但如果有人可以启发我,我会很感激
答案 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()方法来评估文本字段是否为空。