[英]JavaScript while loop doesn't work with condition
我創建了名為getIndex
函數來獲取我從數組中搜索的索引。
當我更改while (1)
而不是while (max < min)
,該循環正在工作,但條件 ( while (max < min)
) 返回 -1。 但是我需要條件來檢查data
數組中是否不存在我的搜索。 為什么它返回 -1 條件?
// assume my array looks-like this.
var data = [1, 2, 3, 4, 5, 7, 8, 9, 10];
function getIndex(search, arr) {
var min, max, guess, count;
min = 0;
max = arr.length - 1;
count = 0;
// If my search is not present in array. Return -1.
while (max < min) {
count++;
guess = Math.floor((min + max) / 2);
if (arr[guess] === search) {
return guess;
} else if (arr[guess] < search) {
min = guess + 1;
} else {
max = guess - 1;
}
}
return -1;
}
getIndex(8, data); // return -1
將 while 條件更改為while(max>min)
你在這里做錯了。你正在檢查 Max 是否小於 min 並且高於 while 循環你將 min 值設置為 0 並將 Max 設置為數組的長度。那么 Max 怎么可能小於 min ? 由於條件為假,不進入循環是正確的。 您需要“最小值小於最大值”或“最大值大於最小值”(兩者都用於相同的目的),然后才能正常工作。
在 while 條件下更改 max 和 min 之間的操作
// assume my array looks-like this.
var data = [1, 2, 3, 4, 5, 7, 8, 9, 10];
debugger;
function getIndex(search, arr) {
var min, max, guess, count;
min = 0;
max = arr.length - 1;
count = 0;
// If my search is not present in array. Return -1.
while (max > min) {
count++;
guess = Math.floor((min + max) / 2);
if (arr[guess] === search) {
return guess;
} else if (arr[guess] < search) {
min = guess + 1;
} else {
max = guess - 1;
}
}
return -1;
}
getIndex(8, data); // return -1
可以使用for循環,更容易理解
// assume my array looks-like this. var data = [1, 2, 3, 4, 5, 7, 8, 9, 10]; function getIndex(search, arr) { var guess = -1; // If my search is not present in array. Return -1. for(var i=0;i<arr.length;i++){ if(arr[i]===search)guess = i; } return guess; } console.log(getIndex(8, data)); // return -1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.