public static void moveRight (int a[], int n){
int aux;
for(int i = 1; i<n; i--){
aux = a[i];
a[i]= a [i];
}
}
我一直尝试使用此代码,但它无法正常工作。
答案 0 :(得分:1)
首先,循环变量应该会上升。所以将i--
更改为i++
。然后,如果我正确理解你要做的事情,那么你需要在循环体中a[i] = a[i-1]
。而不是a[i] = a[i]
(什么都不做)。此外,您不需要aux
。
当一切都向右移动时,你不清楚a[0]
想要发生什么。这应该在循环退出后发生。 (如果您希望最后一个元素移动到第一个元素位置,那么我会撤消关于tmp
的评论;您需要将最后一个元素存储在某个位置,以便它在数组元素之后可用被覆盖。但它只需要在循环开始之前被隐藏一次。)
另一条评论:n
绝不能超过a.length
,否则循环会抛出异常。如果n
总是等于a.length
,那么您可以免除参数,只需在方法中使用a.length
。
答案 1 :(得分:1)
打印数组内容时,左侧以最低值开头。如果将值向下移动索引,则可以说这是在左侧。要按索引向上移动值,您需要从最后开始并逐步减少。
// Move one up
for (int i = a.length - 1; i > 0; i--)
a[i] = a[i-1];
// Move one down
for (int i = 0; i < a.length-1; i++)
a[i] = a[i+1];
注意:与使用专为批量数组副本设计的arraycopy
相比,这可能是无效的。
// Move one up
System.arraycopy(a, 0, a, 1, a.length-1);
// Move one down
System.arraycopy(a, 1, a, 0, a.length-1);