2012-10-27 23 views
13

chcę uzyskać dane wejściowe z stdin w albowiemcoraz wejściowe ze standardowego wejścia

3 
10 20 30 

pierwsza liczba to ilość liczb w drugim wierszu. Oto co otrzymałem, ale utknęło w pętli while ... więc wierzę. Uruchomiłem tryb debugowania i tablica nie ma przypisanych żadnych wartości ...

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

    } 

} 

Odpowiedz

10

Ma to związek z warunkiem.

in.hasNextInt() 

To pozwala zachować pętli, a następnie po trzech iteracji „i” wartość równa 4 i testami [4] rzuca ArrayIndexOutOfBoundException.

Rozwiązanie to zrobić, może być

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

dzięki .. z jakiegoś powodu działa z pętlą for; jednak nie działa z pętlą while .. nawet po dodaniu warunku – miatech

3

Aktualizacja natomiast czytać tylko pożądanych numerów jak poniżej:

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

Dodatkowy stan && i < testNum dodane while będzie przestać czytać numery Skoro twój przeczytałem liczby odpowiadające rozmiarowi twojej tablicy, w przeciwnym razie przejdzie ona w nieokreślony sposób, a otrzymasz ArrayIndexOutOfBoundException, gdy tablica liczbowa testCases jest pełna, tzn. skończyłeś czytać zNumery.

+1

, dlaczego działa z pętlą for, ale próbowałem twojej metody i nie zadziałało, dziwne jest to, że powinienem aktualizować zmienna "i" z każdą iteracją – miatech

+0

jest coś z metodą hasNextInt(), która utrzymuje pętlę lub czeka na następne int ... – miatech

+1

@miatech To było głupie. Musimy umieścić 'i

Powiązane problemy