任何人都可以给我一些想法,为什么number1被记录为0,即使它应该被记录为1(或者至少我认为是这样)?我是Javascript的新手。
var array = [3,1,2];
var array2 = []
var number1 = 0;
var number2 = 0;
var number3 = 0;
for(var i = 0; i < array.length; i++) {
if(array[i] > number3) {
number3 = array[i]
}
else if(array[i] > number2) {
number2 = array[i];
}
else if (array[i] > number1) {
number1 = array[i];
}
}
console.log(number1)
console.log(number2)
console.log(number3)
答案 0 :(得分:4)
在这段代码中,对number1
的唯一赋值是声明它的行,它赋值为0.您是否也意味着这一行:
array[i] = number1;
......阅读:
number1 = array[i];
答案 1 :(得分:1)
问题在于您的陈述的逻辑以及您执行错误分配的事实。这就是正在发生的事情
第一次迭代: 3> 0所以number3 = 3 第二次迭代: 1!&gt; 3所以我们移动到第二个条件,其中1> 0所以number2 = 1 第三次迭代: 2!&gt; 3和2> 1 so number2 = 2然后循环完成
修复布尔登录后,将数组[index]指定为number1将起作用
答案 2 :(得分:1)
我看到你修复了“array [i] = number1;”是正确的方式。如果我仍然无法理解我有时会使用“提醒”进行粗略调试的问题 - 请参阅我的帖子底部。
在我看来,你只需在第3行将其设置为0(var number1 = 0;) 并且从不将它设置为其他任何东西。
让我们循环播放。
循环1:
if(array[i] > number3) {
number3 = array[i]
}
第一个循环上的number3 = 0且数组[0] = 3,因此数组[0]的值将分配给number3,使number3 = 3
循环2: 如果
,现在将跳到其他地方else if(array[i] > number2) {
number2 = array[i];
}
第二个循环上的number2 = 0且数组[1] = 1,因此数组[1]的值将分配给number2,使number2 = 1
循环3: 如果从number2 = 1并且array [i] = 2,那么也将击中第一个 现在number2将被分配2
else if(array[i] > number2) {
number2 = array[i];
}
现在你的循环完成然后没有击中 最后的其他如果。所以number1仍然等于0 除此之外,你正在做 array [i] = number1; 当你应该做的事情 number1 = array [i]而不是
else if (array[i] > number1) {
array[i] = number1;
}
至少这就是它对我的看法。
示例警报以帮助调试。
<script>
var array = [3,1,2];
var array2 = []
var number1 = 0;
var number2 = 0;
var number3 = 0;
for(var i = 0; i < array.length; i++) {
alert( 'array['+i+']='+array[i] + ', number3 ='+number3 + ', number2 ='+number2 + ', number1 ='+number1)
if(array[i] > number3) {
number3 = array[i];
alert (' got here A');
}
else if(array[i] > number2) {
number2 = array[i];
alert (' got here B');
}
else if (array[i] > number1) {
number1 = array[i];
alert (' got here C');
}
}
console.log(number1)
console.log(number2)
console.log(number3)
</script>
希望有所帮助。
答案 3 :(得分:1)
代码似乎在一个数字数组中寻找三个最高,正,不同的值。如果是这样,它会遇到一个逻辑缺陷,即在现有最高值中覆盖的值可能是下一个最高值的候选值,但不会被检查。产生明显预期结果的代码需要执行此类检查,例如:
var array = [3,1,2];
var array2 = []
var number1 = 0;
var number2 = 0;
var number3 = 0;
var number, temp;
for(var i = 0; i < array.length; i++) {
number = array[i];
if( number > number3) { // swap number with number3
temp = number3;
number3 = number;
number = temp;
}
if( number > number2) { //swap number with number2
temp = number2;
number2 = number;
number = temp;
}
if( number > number1) {
number1 = number;
}
}
console.log(number1)
console.log(number2)
console.log(number3)
如果需要找到三个最高但不一定不同的值,请将>
测试更改为>=
个版本。
答案 4 :(得分:0)
你已经设置了数组[i] = number1,所以它将保持为0.如果设置number1 = array [i]它将设置为2
答案 5 :(得分:0)
1)你的
else if (array[i] > number1) {
array[i] = number1;
}
永远不会被召唤。如果您尝试逐步调试,您将看到不满足条件。
2)你的代码被颠倒了。
array[i] = number1;
答案 6 :(得分:0)
number1
和 不 1
时, array = [3, 2, 1]
值才会为array = [3, 1, 2]
。
请注意,如果array = [3, 1, 2]
,则number2
的值在1
循环的第二次迭代中为for
,在第三次迭代中为3。因此,number3
值永远不会改变,因为控件永远不会转到第3个if语句。
for
迭代1: 迭代2: 迭代3: <强>供参考:强> array = [3, 1, 2]
循环细分
number1 = 3
number2 = 0
number3 = 0
number1 = 3
number2 = 1
number3 = 0
number1 = 3
number2 = 2
number3 = 0 var array = [3, 2, 1]; // old value: [3, 1, 2]
var array2 = []
var number1 = 0;
var number2 = 0;
var number3 = 0;
for (var i = 0; i < array.length; i++) {
if (array[i] > number3) {
number3 = array[i]; // gets value 3
} else if (array[i] > number2) {
number2 = array[i]; // gets value 1 if array = [3, 1, 2] and later value 2
} else if (array[i] > number1) { // condition never satisfied if array = [3, 1, 2]
number1 = array[i];
}
}
console.log(number1)
console.log(number2)
console.log(number3)
答案 7 :(得分:0)
这个循环不起作用,因为一个循环重复循环中的所有数字2刚刚被覆盖。
只是做:
var array = [3,1,2]
var array2 = array.sort();