2010-06-03 140 views
0

此循環正常工作,但有時會過早退出。我在其中設置了一段代碼,以便查看隨機數。它僅關閉過早當隨機數是等於最高編號的問題,用戶輸入循環過早退出

(例...用戶想要10個問題,如果隨機數爲10的程序退出。)

我有不知道爲什麼,因爲我有它設置,如果(隨機數< =問題的數量)

for (int loop = 1; loop < loopCount; loop++) 
{ 
    aa = r.nextInt (10 + 1); 
    abc = (int) aa; 

    String[] userAnswer = new String[x]; 

    JOptionPane.showMessageDialog (null, abc); 

    if (abc <= x) 
    { 
     for (overValue = 1; overValue < forLoop; overValue++); 
     { 
     userAnswer[j] = JOptionPane.showInputDialog (null, "Question " + quesNum + "\n" + questions[abc] + "\n\nA: " + a[abc] + "\nB: " + b[abc] + "\nC: " + c[abc] + "\nD: " + d[abc]); 

     if (userAnswer[j].equals (answers[j])) 
     { 
      JOptionPane.showMessageDialog (null, "Correct. \nThe Correct Answer is " + answers[abc]); 
     } 
     else 
     { 
      JOptionPane.showMessageDialog (null, "Wrong. \n The Correct Answer is " + answers[abc]); 
     }//else 

     }//for 

    }//if 

}//for 
+0

如果過早關閉,循環無法正常工作。 – CheesePls 2010-06-03 13:35:33

+0

看起來你已經選擇了你的答案。但稍後,請學習如何提供有意義的變量名稱。到底是什麼,aa,abc和x? – Phil 2010-06-04 03:07:02

回答

1

看來,你可以在顯示的最後一行有一個數組越界:

  String[] userAnswer = new String[x]; 

      JOptionPane.showMessageDialog(null,abc); 

      if(abc <= x) 
      { 
       for(overValue = 1; overValue < forLoop; overValue++); 
       { 
        ... questions[abc] ... a[abc] ... b[abc] ... c[abc] ... d[abc] ... 

如果陣列questionsabcd是大小x(如userAnswer是)的,與x等原因引起的異常索引它們。

你應該有

  if(abc < x) 

的條件,最好你也應該調整隨機生成:

aa = r.nextInt (x); 
+0

越界?我不明白,對不起。 j設置爲隨機數,所以它應該是userAnswer [randomNumber從數組中繪製] – 2010-06-03 13:13:31

+0

@尼克,對不起,第一個版本引用了代碼的錯誤部分,希望現在更清楚。 – 2010-06-03 13:15:50

+0

儘管如此,不是x使數組的長度? x被定義爲用戶想要的問題總數,所以我聲明x在數組中,因此如果用戶想要10個問題,userAnswer會是String [10] – 2010-06-03 13:20:44

0

你的意思是for循環外:

for (int loop = 1; loop < loopCount; loop++) { 

或內循環

for (overValue = 1; overValue < forLoop; overValue++); 

兩個for循環有問題,因爲最初的數字應該爲0不是1,而另一個問題是,第二個for循環與結束;,所以它不會在所有

0

你的問題是,做任何事數組索引從0開始並轉到length-1。如果長度爲x,則最高索引爲x-1,因此當輸入正好爲x並且您嘗試索引到數組中時,它將失敗。

條件應該是abc < x

+0

修復了主要問題。它現在正在工作而不退出。現在它變得奇怪了。我輸入正確的答案,它告訴我我錯了......但我是對的。 例子:我輸入c,我知道它的權利...它應該比較c和c,出來0,如果他們相等...應該吐出正確! 尚未得到一個錯誤!正確的答案是c。 它使我跆拳道。 – 2010-06-03 13:17:38

0

我不知道,你已經有了for循環和loopCount從,但它看起來像for循環的off-by-之一。我通常會寫(x = 0; x < X; x ++)或者(x = 1; x < = X; x ++)。

我不認爲這是你的實際問題,但它是檢查的東西。