我注意到如果我在elseif / else语句之上有多个if语句,那么最后一个if,else if和else似乎会创建自己的逻辑块,并且它忽略了第一个ifs:< / p>
http://jsbin.com/runudedaja/edit?js,console
var a = '';
for (i=1; i<6; i++) {
if (i === 1) {
a = 'first if';
console.log(a + " " + i);
}
if (i === 2) {
a = 'second if'
console.log(a + " " + i);
}
if (i === 3) {
a = 'third if';
console.log(a + " " + i);
}
else if (i === 4) {
a = 'else if';
console.log(a + " " + i);
}
else {
a = 'else';
console.log(a + " " + i);
}
}
如您所见,i===1
和i===2
同时点击了他们的特定if
声明和最后一个声明。但i===3
,else if (i===4)
和else
都符合我的预期。
控制台日志
"first if 1"
"else 1"
"second if 2"
"else 2"
"third if 3"
"else if 4"
"else 5"
**期望输出**
"first if 1"
"second if 2"
"third if 3"
"else if 4"
"else 5"
这里发生了什么,我该如何解决?
答案 0 :(得分:1)
您错过了i === 2
和i === 3
的{{1}}语句,因此如果下面添加了else if
语句的语句部分,则会变为3。
第一次检查:
if (i === 1) {
a = 'first if';
console.log(a + " " + i);
}
第二次检查:
if (i === 2) {
a = 'second if'
console.log(a + " " + i);
}
第三项检查:
if (i === 3) {
a = 'third if';
console.log(a + " " + i);
}
else if (i === 4) {
a = 'else if';
console.log(a + " " + i);
}
else {
a = 'else';
console.log(a + " " + i);
}
这意味着当i
等于1时,每个if块都会检查它,并且会击中第一个if块和第三个块的else。
if
至else if
var a = '';
for (i=1; i<6; i++) {
if (i === 1) {
a = 'first if';
console.log(a + " " + i);
}
else if (i === 2) {
a = 'second if'
console.log(a + " " + i);
}
else if (i === 3) {
a = 'third if';
console.log(a + " " + i);
}
else if (i === 4) {
a = 'else if';
console.log(a + " " + i);
}
else {
a = 'else';
console.log(a + " " + i);
}
}
&#13;
Switch
声明
var a = '';
for (i = 1; i < 6; i++) {
switch (i) {
case 1:
a = 'first if';
console.log(a + " " + i);
break;
case 2:
a = 'second if'
console.log(a + " " + i);
break;
case 3:
a = 'third if';
console.log(a + " " + i);
break;
case 4:
a = 'else if';
console.log(a + " " + i);
break;
default:
a = 'else';
console.log(a + " " + i);
break;
}
}
&#13;
答案 1 :(得分:0)
您似乎错过了几个else
个关键字。
您的此代码:
if (i === 1) {
a = 'first if';
console.log(a + " " + i);
}
if (i === 2) {
a = 'second if'
console.log(a + " " + i);
}
if (i === 3) {
...
应该是:
if (i === 1) {
a = 'first if';
console.log(a + " " + i);
} else // <=== NEW "else"
if (i === 2) {
a = 'second if'
console.log(a + " " + i);
} else // <=== NEW "else"
if (i === 3) {
...
答案 2 :(得分:0)
您有三个单独的检查:
1
if (i === 1) {
a = 'first if';
console.log(a + " " + i);
}
2
if (i === 2) {
a = 'second if'
console.log(a + " " + i);
}
3
if (i === 3) {
a = 'third if';
console.log(a + " " + i);
}
else if (i === 4) {
a = 'else if';
console.log(a + " " + i);
}
else {
a = 'else';
console.log(a + " " + i);
}
这意味着如果i
为1
或2
,那么它会在第三次检查中满足else
。
最简单的解决方案(尽管不是最干净的),是将第二个和第三个if
变为else if
。最干净的解决方案是使用switch
。
答案 3 :(得分:0)
在这种情况下,最好是转换:
import numpy as np
import timeit
def func_a(data):
return np.apply_along_axis(lambda x: np.bincount(x, minlength=data.max()+1), axis=0, arr=data)
def func_b(data):
data_max=data.max()+1
return np.apply_along_axis(lambda x: np.bincount(x, minlength=data_max), axis=0, arr=data)
setup = '''import numpy as np
data=np.array([[1,2,5,4,8,7,8,9,14,8,14,5,2,1],
[5,8,7,13,7,8,9,21,5,7,9,24,3,2]])
from __main__ import func_a, func_b'''
而不是这种生活和回归,你也可以简单地做一个=&#34;它的其他&#34;就像你的代码一样。此外,我会把console.log放在最后一个if,因为它非常重复。
答案 4 :(得分:0)
Else在那里没用,最后也是如此,顺便说一下你可能想用switch
if (i === 4) {
a = 'else if';
console.log(a + " " + i);
}
a = 'else';
console.log(a + " " + i);
答案 5 :(得分:0)
您已撰写了2个if
- 语句和1个if
/ else-if
/ else
声明:
1
if (i === 1) {
a = 'first if';
console.log(a + " " + i);
}
2。
if (i === 2) {
a = 'second if'
console.log(a + " " + i);
}
3。
if (i === 3) {
a = 'third if';
console.log(a + " " + i);
}
else if (i === 4) {
a = 'else if';
console.log(a + " " + i);
}
else {
a = 'else';
console.log(a + " " + i);
}
代码执行进入每个if语句,这意味着当i
不是3
时,所有迭代都会执行最终的else
子句。