obtenir l'entrée de stdin


Je veux obtenir une entrée de stdin dans le for of

3
10 20 30

Le premier nombre est le nombre de nombres dans la deuxième ligne. Voici ce que j'ai, mais il est coincé dans la boucle while... donc, je crois. J'ai couru en mode débogage et le tableau ne reçoit aucune valeur...

import java.util.*;

public class Tester {   

   public static void main (String[] args)
   {

       int testNum;
       int[] testCases;

       Scanner in = new Scanner(System.in);

       System.out.println("Enter test number");
       testNum = in.nextInt();

       testCases = new int[testNum];

       int i = 0;

       while(in.hasNextInt()) {
           testCases[i] = in.nextInt();
           i++;
       }

       for(Integer t : testCases) {
           if(t != null)
               System.out.println(t.toString());               
       }

   } 

} 
Author: miatech, 2012-10-27

2 answers

Cela a à voir avec la condition.

in.hasNextInt()

Il vous permet de continuer à faire une boucle, puis après trois itérations, la valeur 'i' est égale à 4 et testCases[4] lance ArrayIndexOutOfBoundException.

La solution pour ce faire pourrait être

for (int i = 0; i < testNum; i++) {
 *//do something*
}
 10
Author: LivingThing, 2012-10-27 00:21:42

Mettez à jour votre while pour lire uniquement les numéros souhaités comme ci-dessous:

      while(i < testNum && in.hasNextInt()) {

La condition supplémentaire && i < testNum ajoutée dans while cessera de lire les nombres une fois que vous aurez lu les nombres équivalents à la taille de votre tableau, sinon elle ira indéfinie et vous obtiendrez ArrayIndexOutOfBoundException lorsque le tableau de nombres testCases est plein, c'est-à-dire que vous avez fini de lire avec des nombres testNum.

 2
Author: Yogendra Singh, 2012-10-27 01:01:07