web-dev-qa-db-fra.com

obtenir des informations de stdin

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

3
10 20 30

le premier nombre est le nombre de nombres sur 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 n'obtient 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());               
       }

   } 

} 
14
miatech

Cela a à voir avec la condition.

in.hasNextInt()

Il vous permet de continuer à boucler, puis après trois itérations, la valeur "i" est égale à 4 et testCases [4] lève ArrayIndexOutOfBoundException.

La solution pour ce faire pourrait être

for (int i = 0; i < testNum; i++) {
 *//do something*
}
10
LivingThing

Mettez à jour votre temps pour lire uniquement les chiffres souhaités comme ci-dessous:

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

La condition supplémentaire && i < testNum ajouté dans while arrêtera la lecture des nombres une fois que vous aurez lu les nombres équivalents à la taille de votre tableau, sinon il restera indéfini et vous obtiendrez ArrayIndexOutOfBoundException lorsque le numéro de tableau testCases est plein, c'est-à-dire que vous avez fini de lire avec testNum nombres.

2
Yogendra Singh