2012-07-10 71 views
0

我想我幾乎可以得到它,如果我可以擺脫一些例外情況,當我嘗試運行它時,該程序會提供給我。下面的代碼我有:使用JFrame的JAVA貸款計算器的例外情況?

package RandomMathGame; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 

public class RandomMathGame { 

    public static void main(String[] args) { 
     RandomProblemGenerator randomProblems = new RandomProblemGenerator(10); 
     final int numberProblems = 10; 
     int correctScore = 0; 
     JPanel panel = new JPanel(); 
     int answer; 
     int correctAnswer; 
     JLabel[] mathProblems = new JLabel[numberProblems]; 
     final JTextField[] mathAnswers = new JTextField[numberProblems]; 
     JLabel[] correctYesNo = new JLabel[numberProblems]; 
     final JLabel score = new JLabel(correctScore + "/10"); 
     JButton submit = new JButton("Submit"); 
     for (int i = 1; i <= numberProblems; i++) 
     { 
      final int X = randomProblems.createNumberX(); 
      final int Y = randomProblems.createNumberY(); 

      mathProblems[i] = new JLabel("" + X + " * " + Y + " = "); 
      mathAnswers[i] = new JTextField(); 


      answer = Integer.parseInt(mathAnswers[i].getText()); 
      correctAnswer = X * Y; 

      if (answer == correctAnswer) 
      { 
       correctYesNo[i] = new JLabel("Correct answer; good job!"); 
       correctScore = correctScore + 1; 
      } 
      else 
      { 
       correctYesNo[i] = new JLabel("Incorrect answer; try again!"); 

      } 
      panel.add(mathProblems[i]); 
      panel.add(mathAnswers[i]); 
      panel.add(correctYesNo[i]); 
      } 

     final int temp = correctScore; 
     submit.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       score.setText("Score: " + temp + "/10"); 
      } 
     }); 



     panel.add(submit); 
     panel.add(score); 

     JFrame gameFrame = new JFrame(); 
     gameFrame.setTitle("Random Math Game"); 
     gameFrame.setSize(150, 150); 
     gameFrame.setVisible(true); 
     gameFrame.setContentPane(panel); 



     } 
    } 

這些都是它給我的例外,當我運行它:

Exception in thread "main" java.lang.NumberFormatException: For input string: "" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:504) 
    at java.lang.Integer.parseInt(Integer.java:527) 
    at RandomMathGame.RandomMathGame.main(RandomMathGame.java:33) 
Java Result: 1 

我嘎吱嘎吱的時間,所以任何幫助,將不勝感激。

回答

1
String answerStr = mathAnswers[i].getText(); 

    if(answerStr.isEmpty()){ 

      correctYesNo[i] = new JLabel("Not a valid answer/answer field empty!"); 
    } else { 

     answer = Integer.parseInt(answerStr); 
     correctAnswer = X * Y; 
     //Rest of your code goes here 
    } 

希望這可以幫助你!

+0

讓我過去的例外。謝謝。 – commandrix 2012-07-10 04:15:11

+0

@Commandrix這是你在看什麼?如果這解決了您的問題,請接受答案。 – Patton 2012-07-10 04:40:27

0
answer = Integer.parseInt(mathAnswers[i].getText()); 

是什麼導致了錯誤。這是因爲你的一個文本框是空白的。在接受用戶輸入之前進行驗證,除非您希望應用程序出錯。

2

您正嘗試從剛剛創建的空白處獲得。

mathAnswers[i] = new JTextField(); 
answer = Integer.parseInt(mathAnswers[i].getText()); 

所以在這裏,你只是從錯誤的地方檢查。 看起來像第一步你想創建文本字段,第二行應該在其他事件。

希望它有幫助