我刚刚为一所编程学校完成了某种形式的能力考试,除了这个问题我得到了正确的答案,虽然看起来真的很容易,但我无法得到它。有什么想法吗?
请注意以下代码。
var x = [1,5,7,13];
for(i=0; i < x.length; i++)
{
x[i] = x[3-i] + 2;
}
一旦程序完成,x中会有什么?
a [3,7,9,15]
b [15,9,11,3]
c [15,9,7,3]
d [15,9,11,17]
答案 0 :(得分:1)
这里的关键是你正在更新你正在阅读的同一个数组。 (注意:通常我会考虑这种不好的做法,而且我看到很多程序员陷入了这个陷阱 - 很容易误解代码)。
要意识到的第一件事是x[3-i]
基本上读取当前索引的另一端。为了更通用,它应该是x[(x.length-1)-i]
,但在这种情况下3
是硬编码的。
现在,第一轮很容易:13+2 = 15
。 13因为第一个元素的另一端是最后一个元素:
x = [15,5,7,13]
▲ │ this+2
└──────┘
在第二轮中,我们将5
替换为7+2 = 9
:
x = [15,9,7,13]
▲ │ this+2
└─┘
在第三轮中,我们发现自己做了一些最初并不明显的事情。我们不是将7
替换为5+2
,而是将其替换为9+2
,而不是因为我们已经将9替换为9:
x = [15,9,11,13]
│ ▲
this+2 └─┘
现在我们最后使用上面相同的推理用15+2
替换最后一个元素:
x = [15,9,11,17]
│ ▲
└───────┘
this+2
答案 1 :(得分:0)
答案是d
第一次循环
x [0] = 13 + 2 = 15
第二个循环
x [1] = 7 + 2 = 9
第三循环
x [2] = 9 + 2 = 11
第四循环
x [3] = 15 + 2 = 17
x = {15,9,11,17}
答案 2 :(得分:0)
要弄清楚这一点,您必须了解x[]
用于引用数组的特定索引。例如:
var x = [5,6,7];
在这种情况下,假设基于0索引的数组,x[0]
将等于5
。
知道这一点,让我们打破你的循环。我们首先逐步填写变量名称而不是变量值,以避免混淆以下变量。
var x = [1,5,7,13];
for(0=0; 0 < x.length; 0++)
{
x[0] = x[3-0] + 2;
}
对于第一次迭代,一切都开始变得更加清晰,因为你可以告诉它现在它将x[0]
(数组中的第一个值)设置为等于x[3-0]
(这会是x[3]
,由于0索引数组而成为13
,加上2. 13 + 2 = 15
。第一个数字是15。
var x = [1,5,7,13];
for(1=1; 1 < x.length; 1++)
{
x[1] = x[3-1] + 2;
}
让我们再试一次! x[3-1]
与x[2]
相同,7
; 7 + 2 = 9
。您的第二个号码是9
。
遵循相同的逻辑,您可以看到循环如何运作并理解它如何引用数组的值。