我一直得到NoSuchElementException?

时间:2017-03-03 18:17:12

标签: java

我必须在同一行上取两个整数,中间有一个空格,并且同一行上也有数组,其间有空格。

我的意见:

5 2
1 2 3 4 5

我的输出:

3 4 5 1 2

我的代码是:

Scanner s = new Scanner(System.in);
int n, d;
n = s.nextInt();
d = s.nextInt();
int a[] = new int[n];
for (int j = 0; j < n; j++) {
    a[j] = s.nextInt();
}
for (int i = 0; i < a.length; i++) {
    a[i] = s.nextInt();
}
for (int j = 0; j < d; j++) {
    int temp = a[0];
    int i;
    for (i = 0; i < n - 1; i++) {
        a[i] = a[i + 1];
        a[n - 1] = temp;
    }
    for (int i = 0; i < n; i++) {
        System.out.print(a[i] + " ");
    }
}

1 个答案:

答案 0 :(得分:0)

似乎当您运行代码中的输入时,这是您的输出:

3 4 1 2 2 

你有这个错误输出而不是你想要的输出的原因是for for循环:

for (i = 0; i < n - 1; i++) {
    a[i] = a[i + 1];
    a[n - 1] = temp;
}

每次迭代,您都将临时值复制到数组的最后一个插槽中,而不是在结束时只执行一次。这将创建重复值,如输出中显示的值。要解决此问题,只需将for循环的最后一行移到for循环之外,如下所示:

for (i = 0; i < n - 1; i++) {
    a[i] = a[i + 1];  
}
a[n - 1] = temp;

进行此更改后,您的程序将按预期工作,除非您在数组中读取两次。我在运行代码之前实际上删除了这些代码行,所以我不确定它是否会导致你的NoSuchElement异常。摆脱这些行,你的代码将正常工作:

for (int i = 0; i < a.length; i++) {
    a[i] = s.nextInt();
}