更改数组中的索引值

时间:2018-12-17 02:17:10

标签: javascript arrays

我已经注册了AP Computer Science Principles。我们的课堂课程使用的是javascript语言,但是我们的老师希望我们习惯于伪编码,因为AP考试采用的是这种风格。我一直在研究教科书中的问题,有一个我不太了解。

enter image description here

我的答案接近C,但是数组中的最后一项不同。在最后一次重复中,将list [6]分配给temp值,即44。那么,为什么最后的数组值C是33?我做错了吗?有人可以指导我完成这些程序并解释我的错误吗?

2 个答案:

答案 0 :(得分:2)

在图像右侧的跟踪中,在第二步中,您有temp = 11。然而,这种情况并非如此。就像您刚刚设置了list[2] = 33一样,温度应该是33。在其他步骤中也会犯同样的错误。

这样想吧。在每个步骤中,设置list[k+1] = 33。然后像这样k = k + 1递增。因此,当您设置temp = list[k]时,它将始终为33。

1.
temp = 33
list1 = 11
list2 = 33

2.
temp = 33
list2 = 66
list3 = 33

3.
temp = 33
list3 = 22
list4 = 33

4.
temp = 33
list4 = 44
list5 = 33

5.
temp = 33
list5 = 55
list6 = 33

答案 1 :(得分:0)

假设问题中奇数代码中的数组是一索引而不是零索引,答案是C。将代码转换为Javascript:

const list = [33, 11, 66, 22, 44, 55];
const n = list.length - 1;
let k = 0;
for (let i = 0; i < n; i++) {
  const temp = list[k];
  list[k] = list[k + 1];
  list[k + 1] = temp;
  k = k + 1;
}
console.log(list);

或者,将其翻译为英语:对于数组中的每个索引i,从索引0开始,切换第i个元素和第i + 1个元素的位置。因此,第一个元素被第二个元素切换,然后第二个元素(刚刚切换的元素)被第三个元素切换,依此类推。最后,您将第一个元素从数组的开头移到结尾。如果您在每次迭代期间都记录阵列,则将更加清楚:

const list = [33, 11, 66, 22, 44, 55];
const n = list.length - 1;
let k = 0;
for (let i = 0; i < n; i++) {
  const temp = list[k];
  list[k] = list[k + 1];
  list[k + 1] = temp;
  k = k + 1;
  console.log(list);
}

图片右侧文本的问题在于,它使用的是每个list# ,就像在原始数组中一样,而不是在此同时考虑到事物可能已经改变,由于掉期。

请注意,在Javascript中,问题中的代码显然以某种方式表示出来,如果需要,您可以使用解构立即切换这些元素的位置,而无需中间temp变量:

const list = [33, 11, 66, 22, 44, 55];
const n = list.length - 1;
let k = 0;
for (let i = 0; i < n; i++) {
  [list[k], list[k + 1]] = [list[k + 1], list[k]];
  k = k + 1;
  console.log(list);
}