Java 使用 For 循环移动数组中的元素

标签 java arrays for-loop

我知道这个循环会打印预期的 {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/

相关文章:

java - 由于 header 不正确,Sh 脚本未执行

java - 在 Java 中,就性能而言,<= 比较与小于比较后跟 OR 后跟等于比较相同吗?

java - 如何在 spring mvc 中将 JSON 对象从 ajax 传递到 Controller ?

python - 将函数应用于Python中结构化numpy数组的单列

Java:查找两个字符串中的共同字符

java - 使用 multipart 发送附加数据

arrays - 如何使用 TypeScript 输入 N 个字符串数组?

arrays - 什么是最好的(实践)方法来存储有关单词在文本中的出现和位置的数据以便快速访问?

java - break命令不会停止循环

javascript - 更好地理解 JavaScript for 循环