Javascript变量比较

时间:2017-01-23 19:54:49

标签: javascript variables conditional console.log

任何人都可以给我一些想法,为什么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)

8 个答案:

答案 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

array = [3, 1, 2]循环细分

迭代1:
number1 = 3
number2 = 0
number3 = 0

迭代2:
number1 = 3
number2 = 1
number3 = 0

迭代3:
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();