2011-11-10 8 views
0

私は表示のためにJTextFieldsgridArray)の配列を使用し、実際の解決のためにintの配列(sudokuGrid)を使用するGUI Sudokuソルバで遊んでいます。このJavaコードがNumberFormatExceptionをスローするのはなぜですか?

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

ここで私のトラブルを引き起こしているコードのセクションがあります:私はそれを実行し、それがint秒にJTextFieldstring秒をキャストしようとすると、それは、int秒にstring Sを解析する上で、特にこのメッセージをNumberFormatExceptionをスローします:

// 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をしようとするだろうが、誰も私を啓発することができる場合、私は」それを感謝します。

+1

あなたの問題を解決した答えを受け入れるべきです。 – Laf

答えて

2

あなたの問題はここにある:あなたがそのように文字列を比較することはできません

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

。代わりに、このようにそれを実行します。

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

これは完璧です。 ) – thomasjbarrett

2

==を使用して文字列の等価性をチェックしていますが、これは参照の等価性のみです。おそらく、あなたは書くことを意図:文字列と== -comparisonを使用して

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

0

は、テキスト(文字列の内容)の等価性をチェックするという意味ではありませんが、文字列、オブジェクト(テストの代わりに平等は、彼らはまったく同じですOBJECT)。代わりにString.equals()を使用してください。

0

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

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

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

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からの値をとってもいいかもしれません(は空のから9までです)

+0

基礎となる文書についてのヒントをありがとう。 – CPerkins

関連する問題