14

我想在 for 中从 stdin 获取输入

3
10 20 30

第一个数字是第二行中数字的数量。这是我得到的,但它卡在了while循环中......所以我相信。我在调试模式下运行并且数组没有分配任何值......

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

   } 

} 
4

2 回答 2

10

这与条件有关。

in.hasNextInt()

它可以让您继续循环,然后在三次迭代后“i”值等于 4,并且 testCases[4] 抛出 ArrayIndexOutOfBoundException。

这样做的解决方案可能是

for (int i = 0; i < testNum; i++) {
 *//do something*
}
于 2012-10-27T00:21:42.923 回答
2

更新您的 while 以仅读取所需的数字,如下所示:

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

&& i < testNum一旦您读取了与您的数组大小相等的数字,添加的附加条件while将停止读取数字,否则它将变得无限,ArrayIndexOutOfBoundException当数字数组testCases已满时您将得到,即您已完成testNum数字阅读。

于 2012-10-27T00:22:04.103 回答