for循环无限期地执行

时间:2015-08-31 08:46:12

标签: java

我无法弄清楚,为什么循环无限期地执行,即使条件正确,请帮助我,它让我疯狂。

 public static void main(String args[] ) throws Exception {

       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

      int n=Integer.parseInt(br.readLine());

     //System.out.println(n);
      long[] a = new long[n+1];
      long[] b = new long[n+1];

      for(int k=1;k<=n;k++)
      {
          String[] str = br.readLine().split(" ");
          a[k]=Long.parseLong(str[0]);
          b[k]= Long.parseLong(str[1]);

      }
   }
 }

3 个答案:

答案 0 :(得分:0)

java.io.BufferedReader.readline()方法读取一行文本。

  

任何一个换行都认为一行被终止   ('\ n'),回车符('\ r')或随后的回车符   立即用换行符。

基本上你没有传递任何输入,br.readLine()不断从System.in读取,因为它无法识别终止该行的位置..

答案 1 :(得分:0)

您的程序在我的机器上运行完美。

我建议你做的一个改变是使用0指数而不是1。

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
long[] a = new long[n];
long[] b = new long[n];

for (int k = 0; k < n; k++) {
    String[] str = br.readLine().split(" ");
    a[k] = Long.parseLong(str[0]);
    b[k] = Long.parseLong(str[1]);
    }
System.out.println(Arrays.toString(a) + " " + Arrays.toString(b));

Output:
3
1 2
4 3
6 2
[1, 4, 6] [2, 3, 2]

您的程序在阅读n之后需要n行输入,这两行是由上面显示的空格分隔的2个长整数。确保输入符合您的要求。还要确保数字不会被同一行中的空格分隔。

3 
1 2 3 4 5 6

如果这样做,根据你的逻辑,数组只会有前两个数字,忽略其余的数字。因为readLine()考虑整行。

答案 2 :(得分:0)

我不完全明白你想要实现的目标,但代码编译并运行并退出此示例输入: 2

5 5

6 6