我知道这个循环会打印预期的 {5, 1, 2, 3, 4} 。 这里的问题是下面的行如何工作?
values[i + 1] = values[i];
据我了解,在第一个循环中,i = 3。所以它将是values[3+1] =values[3],这意味着在第4个索引上将有3的元素。这显然是错误的是,这不是代码的工作方式,因为输出不同。
int[] values = new int[]
{1, 2, 3, 4, 5};
int temp = values[values.length - 1];
for (int i = values.length - 2; i >= 0; i--)
{
values[i + 1] = values[i];
}
values[0] = temp;
System.out.println(Arrays.toString(values));
代码将数组的元素向右移动,并将最右边的元素移动到最左边的位置。
请给我解释一下,因为我很困惑。谢谢。
最佳答案
关键是看如何values
在循环过程中发生变化。由于这不是特定于语言的,所以让我们在 JavaScript 中查看它,以便我们可以在现场运行它(我还将 values
更改为 v
以使消息更短,这样它们就不会换行):
var msg;
var v = [1, 2, 3, 4, 5];
var temp = v[v.length - 1];
for (var i = v.length - 2; i >= 0; i--)
{
msg = "Replacing v[" + i + " + 1] with v[" + i + "]: " + JSON.stringify(v);
v[i + 1] = v[i];
msg += " => " + JSON.stringify(v);
console.log(msg);
}
msg = "Replacing v[0] with temp: " + JSON.stringify(v);
v[0] = temp;
msg += " => " + JSON.stringify(v);
console.log(msg);
所以
- 首先,我们将第五个值 (
5
) 放入temp
中所以我们稍后再做 - 然后,在循环中,我们将第五个值 (
values[i + 1]
) 替换为第四个值 (values[i]
),从而更改1, 2, 3, 4, 5
进入1, 2, 3, 4, 4
- 我们再做一次,将第四个替换为第三个,更改
1, 2, 3, 4, 4
进入1, 2, 3, 3, 4
- 继续这样做,直到我们用第一个条目替换第二个条目,留下
1, 1, 2, 3, 4
- 在循环之外,输入
temp
排在第一位,给我们最终结果5, 1, 2, 3, 4
关于Java 使用 For 循环移动数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40127741/