2012-10-27 40 views
13

Tôi muốn để có được đầu vào từ stdin trong cho cácnhận đầu vào từ stdin

3 
10 20 30 

số đầu tiên là số lượng số trong dòng thứ hai. Đây là những gì tôi có, nhưng nó bị mắc kẹt trong vòng lặp trong khi ... vì vậy tôi tin. Tôi chạy ở chế độ gỡ lỗi và mảng không nhận được chỉ định bất kỳ giá trị nào ...

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

    } 

} 

Trả lời

10

Nó phải làm với điều kiện.

in.hasNextInt() 

Nó cho phép bạn giữ vòng lặp và sau đó ba giá trị 'i' lặp lại bằng 4 và testCases [4] ném ArrayIndexOutOfBoundException.

Giải pháp để làm điều này có thể là

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

cảm ơn .. vì một số lý do nó hoạt động với vòng lặp for; tuy nhiên nó không hoạt động với vòng lặp while .. ngay cả sau khi thêm điều kiện – miatech

3

Cập nhật trong khi của bạn để đọc số chỉ mong muốn như sau:

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

Điều kiện thêm && i < testNum thêm vào trong while sẽ ngừng đọc những con số lần bạn đã đọc những con số tương đương với kích thước mảng của bạn, nếu không nó sẽ đi indefininte và bạn sẽ nhận được ArrayIndexOutOfBoundException khi mảng số testCases đầy đủ nghĩa là bạn đã đọc xong với testNum số.

+1

tại sao nó hoạt động với vòng lặp for, nhưng tôi đã thử phương thức của bạn và nó không hoạt động, điều kỳ lạ là nó nên khi tôi cập nhật biến 'i' với mỗi lần lặp – miatech

+0

có điều gì đó với phương thức hasNextInt() giữ vòng lặp hoặc chờ đợi cho int tiếp theo ... – miatech

+1

@miatech Thật ngớ ngẩn. Chúng ta cần đặt 'i

Các vấn đề liên quan