Can anyone give me some thoughts as to why number1 is being logged as 0 even though it should be logged as 1(or at least I think so)? I'm new to 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)
In this code, the only assignment to number1
is the line that declares it, which assigns the value 0. Did you perhaps mean for this line:
array[i] = number1;
...to read:
number1 = array[i];
?
The problem is the logic of your statements and the fact that you are performing the incorrect assignment. This is what is happening
First iteration: 3 > 0 so number3 = 3 Second iteration: 1 !> 3 so we move to the second conditional where 1 > 0 so number2 = 1 third iteration: 2 !> 3 and 2 > 1 so number2 = 2 then the loop is done
Once you fix the boolean login assigning array[index] to number1 will work
I SEE YOU FIXED THE "array[i] = number1;" to be the right way. If still having trouble understanding issues i sometimes put in crude debugging using "alerts" - see bottom of my post .
Looks to me like you simply set it to 0 in line 3 (var number1 = 0; ) and never set it to anything else.
lets go loop by loop.
loop 1:
if(array[i] > number3) {
number3 = array[i]
}
number3 = 0 on first loop and array[0] = 3, so value of array[0] will be assigned to number3, making number3 = 3
loop 2: will now skip to this else if
else if(array[i] > number2) {
number2 = array[i];
}
number2 = 0 on second loop and array[1] = 1, so value of array[1] will be assigned to number2, making number2 = 1
loop 3: will also hit the first else if since number2 = 1 and array[i] = 2 now number2 will be assigned 2
else if(array[i] > number2) {
number2 = array[i];
}
now your looping is done then with out hitting the last else if. so number1 still equals 0 besides that you are doing array[i] = number1; when you should do something like number1 = array[i] instead
else if (array[i] > number1) {
array[i] = number1;
}
at least this is what it looks like it's doing to me.
Sample alerts to help debug.
<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>
hope that helps.
The code appears to be looking for the three highest, positive, different values in an an array of numbers. If so it suffers a logic flaw that the value overwritten in an existing highest value could be a candidate for the next highest value but does not get checked. Code that produces the kind of result apparently expected needs to perform such a check, as for example :
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)
If the three highest but not necessarily different values need to be found, change the >
tests to >=
versions.
您已设置array [i] = number1,因此它将保持为0。如果您设置number1 = array [i],它将被设置为2
1) Your
else if (array[i] > number1) {
array[i] = number1;
}
never is called. If you try to debug step by step, you will see the condition is not met.
2) you have your code inverted.
array[i] = number1;
number1
value will be 1
only if array = [3, 2, 1]
and not array = [3, 1, 2]
.
Note that if array = [3, 1, 2]
, the value of number2
is 1
in second iteration of the for
loop and 3 in third iteration. So the number3
value never changes as the control never goes to the 3rd if statement.
for
loop breakdown with array = [3, 1, 2]
Iteration 1:
number1 = 3
number2 = 0
number3 = 0
Iteration 2:
number1 = 3
number2 = 1
number3 = 0
Iteration 3:
number1 = 3
number2 = 2
number3 = 0
FYI:
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)
This loop doesn't work because a loop repeat everything inside the loop the number2 just got overitten.
Just do:
var array = [3,1,2] var array2 = array.sort();
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.