2010-06-03 3 views
0

Cette boucle fonctionne correctement mais se ferme prématurément à certains moments. J'ai mis un morceau de code dedans pour que je puisse voir le nombre aléatoire. Il ne se ferme prématurément lorsque le nombre aléatoire est égal à la question numéro le plus élevé des entrées utilisateurBoucle prématurément Quitter

(exemple ... un utilisateur veut 10 questions, si le nombre aléatoire est 10 le programme se ferme.)

Je aucune idée pourquoi depuis que je l'ai mis à si (nombre aléatoire < = le nombre de questions)

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

La boucle ne fonctionne pas correctement si elle se ferme prématurément. – CheesePls

+0

On dirait que vous avez choisi votre réponse. Mais plus tard, s'il vous plaît, apprenez comment donner des noms de variables significatifs. Que diable sont aa, abc et x? – Phil

Répondre

1

il semble que vous pourriez avoir un tableau hors limites à la dernière ligne affichée:

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

Si les tableaux questions, a, b, c ou d sont de taille x (comme userAnswer est), les indexer avec x provoque une telle exception.

Vous devriez avoir une condition de

  if(abc < x) 

et de préférence, vous devez également régler la génération aléatoire:

aa = r.nextInt (x); 
+0

hors limites? Je ne comprends pas, désolé. j est défini sur le nombre aléatoire, donc il devrait être userAnswer [randomNumber pour dessiner à partir d'un tableau] –

+0

@Nick, désolé, la première version citait la mauvaise partie du code, espérons que c'est plus clair maintenant. –

+0

Attendez, n'est-ce pas x qui fait la longueur du tableau? x est défini comme le nombre total de questions que l'utilisateur veut, donc j'ai réclamé x dans le tableau comme si l'utilisateur voulait 10 questions userAnswer serait String [10] –

0

Vous voulez dire l'extérieur pour la boucle:

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

ou intérieur pour boucle

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

Tant la boucle a un problème parce que le nombre initial devrait être 0 pas être 1. Et un autre problème est que la seconde pour mettre fin à la boucle avec;, il ne fera rien du tout

0

Votre problème est que Les indices de tableau commencent à partir de 0 et vont à longueur-1. Si la longueur est x, l'index le plus élevé est x-1, donc lorsque l'entrée est exactement x et que vous essayez d'indexer dans le tableau, il échouera.

La condition doit être abc < x

+0

Cela a résolu le problème principal. Il fonctionne maintenant sans sortir. Maintenant, c'est être bizarre. Je tape la bonne réponse et ça me dit que je me trompe ... mais j'ai raison. Exemple: Je tape c et je connais son bon ... il faut comparer c à c et sortir 0 et si elles sont égales ... devrait cracher Corriger! encore je reçois un mauvais! La réponse correcte est c. Il m'a fait wtf. –

0

Je ne sais pas où vous avez ForLoop et loopCount de, mais il semble que les boucles for sont hors par un. J'écrirais habituellement pour (x = 0; x < X; x ++) ou pour (x = 1; x < = X; x ++).

Je ne pense pas que ce soit votre vrai problème, mais c'est quelque chose à vérifier.

Questions connexes