петля преждевременно выходящая - PullRequest
0 голосов
/ 03 июня 2010

Этот цикл работает нормально, но иногда преждевременно завершает работу. Я установил кусок кода в нем, чтобы я мог просмотреть случайное число. Он закрывается преждевременно только тогда, когда случайное число равно наибольшему пронумерованному вопросу, который вводит пользователь

(Пример ... пользователю нужно 10 вопросов, если случайное число равно 10, программа выходит.)

Я понятия не имею, почему, поскольку у меня установлено значение if (случайное число <= количество вопросов) </p>

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

Ответы [ 4 ]

1 голос
/ 03 июня 2010

Похоже, у вас может быть массив вне границ в последней показанной строке:

            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] ...

Если массивы questions, a, b, c или d имеют размер x (как userAnswer), индексация их с помощью x вызывает такое исключение.

У вас должно быть условие

            if(abc < x)

и желательно также настроить случайное поколение:

aa = r.nextInt ( x );
0 голосов
/ 03 июня 2010

Я не уверен, откуда вы взяли forLoop и loopCount, но похоже, что циклы for отключены. Я обычно писал бы для (x = 0; x

Я не думаю, что это ваша настоящая проблема, но это что-то проверить.

0 голосов
/ 03 июня 2010

Ваша проблема в том, что индексы массива начинаются с 0 и идут до длины-1. Если длина равна x, самый высокий индекс равен x-1, поэтому, когда входное значение равно x и вы пытаетесь индексировать в массив, произойдет сбой.

Условие должно быть abc < x

0 голосов
/ 03 июня 2010

Вы имеете в виду внешний цикл for:

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

или внутренний цикл

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

У обоих циклов for есть проблема, поскольку начальное число должно быть 0, а не 1. И еще одна проблема заключается в том, что второй цикл for заканчивается на;, поэтому он вообще ничего не будет делать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...