2010-06-03 189 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 ++)。

我不认为这是你的实际问题,但它是检查的东西。