我在更改后打印数组时遇到问题。代码应该包含一个数组,然后我插入一个应该成为索引号的数字(本例4)。然后获取该数字并移动到数组的后面,而所有其他数字在数组中向上移动一个索引以填充空白点。出于某种原因,它不允许我在进行更改后打印数组。
location.reload
答案 0 :(得分:1)
由于您的代码中包含无限循环,因此您无法打印任何内容:
while(k < a.length) {
a[k] = a[k] - 1;
}
如果条件k < a.length
为true
,则它始终为true
,因为您永远不会在循环中更改其状态,换句话说k
永远不会在此循环中修改它仅在外部修改,a.length
也不会更改。
ArrayIndexOutOfBoundsException
代码中的第二个问题是a[a.length] = temp;
,如果到达,则会抛出ArrayIndexOutOfBoundsException
因为数组的索引从0
变为a.length - 1
。
SendaAftast
此外,您的方法SendaAftast
似乎没有正确编写,据我了解您的背景,它应该是这样的:
public static int SendaAftast(int a[], int i) {
int temp = a[i];
// Move everything from i to a.length - 2
for(int k = i; k < a.length - 1; k++) {
a[k] = a[k + 1];
}
// Set the new value of the last element of the array
a[a.length - 1] = temp;
return a[i];
}
或者更快System.arraycopy(src, srcPos, dest, destPos, length)
:
public static int SendaAftast(int a[], int i) {
int temp = a[i];
// Move everything from i to a.length - 2
System.arraycopy(a, i + 1, a, i, a.length - 1 - i);
// Set the new value of the last element of the array
a[a.length - 1] = temp;
return a[i];
}
要打印数组,您必须先将其转换为String
并且最简单的方法是使用Arrays.toString(myArray)
,因此您可以像这样打印:
System.out.println(Arrays.toString(a));
答案 1 :(得分:0)
public static int SendaAftast(int a[], int i) {
int temp = a[i];
for (int k = i; k < a.length-1; k++) {
a[k] = a[k+1] ;
}
a[a.length - 1] = temp;
return a[i];
}
你的SendaAftast应该是这样的。内部while循环是无用的,也是无限循环导致程序无法打印的原因。变量'a'也不能通过它自己的大小来索引,因为数组中的计数从0开始 - a.length-1,因此要获得数组的最后一个值,你应该使用[a.length-1]而不是a [则为a.length]。
答案 2 :(得分:-2)
更改行:
a[k] = a[k] - 1;
到
a[k] = a[k-1];
再见!