JavaScript while循环不适用于条件

时间:2016-05-01 06:34:00

标签: javascript while-loop

我为get索引创建了名为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

4 个答案:

答案 0 :(得分:1)

将while条件更改为while(max>min)

答案 1 :(得分:1)

你在这里犯了错误。你正在检查Max是否小于或小于等于以及循环你将min值设置为0并且最大值设置为数组长度。那么Max怎么样小于分钟?由于条件为假,因此不进入循环是正确的。你需要&#34; min小于max&#34;或者&#34; Max大于min&#34; (两者都有相同的用途),然后才能正常工作。

答案 2 :(得分:1)

在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

答案 3 :(得分:0)

你可以使用for循环,更容易理解

&#13;
&#13;
// 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
&#13;
&#13;
&#13;