2012-10-27 5 views
13

Voglio ottenere input da stdin in per diricevendo input da stdin

3 
10 20 30 

il primo numero è la quantità di numeri nella seconda riga. Ecco cosa ho ottenuto, ma è bloccato nel ciclo while ... quindi credo. Ho eseguito in modalità di debug e l'array non sta ottenendo assegnare alcun valore ...

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());    
     } 

    } 

} 

risposta

10

Ha a che fare con la condizione.

in.hasNextInt() 

ti permette di tenere loop e poi dopo tre iterazioni 'i' valore è uguale a 4 e casi di test [4] getta ArrayIndexOutOfBoundException.

La soluzione per fare questo potrebbe essere

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

grazie .. per qualche motivo funziona con il ciclo for; tuttavia non funziona con il ciclo while .. anche dopo aver aggiunto la condizione – miatech

3

Aggiornare la pena di leggere solo numeri desiderati come di seguito:

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

La condizione aggiuntiva && i < testNum aggiunto in while si smettere di leggere i numeri una volta che il hai letto i numeri equivalenti alla dimensione del tuo array, altrimenti andrà indefinitamente e riceverai ArrayIndexOutOfBoundException quando il numero dell'array testCases è pieno cioè hai finito di leggere con testNum numeri.

+1

perché funziona con il ciclo for, ma ho provato il tuo metodo e non ha funzionato, la cosa strana è che dovrebbe essere come sto aggiornando la variabile 'i' con ogni iterazione – miatech

+0

c'è qualcosa con il metodo hasNextInt() che mantiene il loop o l'attesa per il prossimo int ... – miatech

+1

@miatech E 'stato stupido. Dobbiamo mettere 'i