0

表示にJTextFields( )の配列を使用し、実際の解法に( )の配列を使用するGUI数独ソルバーで遊んでいます。それを実行してsをsにキャストしようとすると、 sをsに解析するときに、具体的には次のメッセージがスローされます。gridArrayintsudokuGridJTextField stringintNumberFormatExceptionstringint

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

==参照の同等性のみを目的とした、を使用して文字列の同等性をチェックしています。おそらくあなたは書くつもりだった:

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

于 2011-11-10T18:43:11.040 に答える
2

あなたの問題はここにあります:

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

そのように文字列を比較することはできません。代わりに次のようにしてください。

if (gridArray[i][j].getText().equals("")) 
于 2011-11-10T18:43:47.953 に答える
1

TextAreaにテキストを要求しないでください。これは、まだ編集プロセスにある可能性があるためです。基になるドキュメント自体を確認してください。

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

また...なぜJTextArea?なぜJTextFieldではないのですか?これを、値が0(空から9と解釈される)のJSpinnerと組み合わせることもできます。

于 2011-11-10T18:54:20.357 に答える
0

文字列で-comparisonを使用==することは、テキスト(文字列の内容)が等しいかどうかをチェックすることを意味するのではなく、String-objectsが等しいかどうかをチェックすることを意味します(テストはまったく同じオブジェクトです)。代わりにString.equals()を使用してください。

于 2011-11-10T18:43:39.553 に答える
0

問題はあなたの平等チェックです:

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

これはあなたが意図していることをしません。Javaでは、これは2つの文字列が同じオブジェクトであるかどうかをチェックし、それらの値が等しいかどうかをチェックしません。String.equals()メソッドを使用して、テキストフィールドが空かどうかを評価する必要があります。

于 2011-11-10T18:46:47.633 に答える