为什么我的if和else语句同时打印?
问题描述:
为什么要打印else和if语句?检查数组是否与第5行中的元素匹配 他们这么做...所以只是我的if语句应该打印。 但是,我的警报条件打印if条件。我试图重新排列代码,仍然没有运气。为什么我的if和else语句同时打印?
var array1 = [1, 89, 3, 4, 5];
var array2 = [1, 2, 7, 10, 89];
for (var i = 0; i < 6; i++) {
for (var j = 0; j < 6; j++) {
if (array1[i] == array2[j]) {
document.getElementById("demo").innerHTML =
"Hello World" //Should just print this since elements match
break;
} else {
alert("Error");
break;
}
}
}
答
只需跳过其他部分。你并不是真的需要这个。除非您希望在条件不成立的情况下执行其他操作,否则省略else语句。
答
当您拨打break
时,它只会终止内部循环。外循环将继续迭代,您的条件将被再次检查,然后运行else
语句。
的另一种方式做到这一点是:
(function() {
for (var i = 0; i < 6; i++) {
for (var j = 0; j < 6; j++) {
if (array1[i] == array2[j]) {
document.getElementById("demo").innerHTML =
"Hello World" //Should just print this since elements match
return;
} else {
alert("Error");
return;
}
}
}
})();
结束语在自执行函数的代码允许您与return
取代break
退出整个功能。
答
如果您想要在内循环中找到匹配时停止外部循环,则需要为break
指定一个标签参数。
outer:
for (var i = 0; i < 6; i++) {
for (var j = 0; j < 6; j++) {
if (array1[i] == array2[j]) {
document.getElementById("demo").innerHTML =
"Hello World" //Should just print this since elements match
break outer;
} else {
alert("Error");
break;
}
}
}
在显示Hello World
之前,您仍可能会收到一些警报。您的代码会针对每个不匹配的元素对发出警报,直到找到匹配为止。因此,除非两个阵列中的匹配元素都是第一个,否则在显示Hello world
之前,您会看到一堆警报。
此外,由于您在if
和else
块中都有break
,因此永远不会超过j
循环的第一次迭代。
如果您只需要一个指示未找到匹配元素的警报,则需要将其移出循环。
var match_found = false;
outer:
for (var i = 0; i < 6; i++) {
for (var j = 0; j < 6; j++) {
if (array1[i] == array2[j]) {
document.getElementById("demo").innerHTML =
"Hello World" //Should just print this since elements match
match_found = true;
break outer;
}
}
}
if (!match_found) {
alert("Error");
}
请格式化该代码..... oO – jdabrowski
那么,六个条件中的五个是虚假的,所以为什么它不提醒?你有什么**循环**,条件运行多次。 – adeneo
'break'语句只会跳出'j'循环,'i'循环不断重复。 – Barmar