我正在尝试在for循环中进行二进制搜索。但是,flash不喜欢以下for循环。
for(var select:int = Math.floor((min + max / 2)), var turns:int = 0; turns < input.length / 2 + 1; turns++, select= Math.floor((min + max / 2))){
if(input[select] > want){
max = select;
} else if (input[select] < want){
min = select;
} else {
return select;
}
}
在第一行,我得到1084:语法错误:在var之前期待标识符。我想我知道为什么(我正在使用,分开不同的陈述),但我该如何解决呢? ;不会起作用,因为它是for循环使用的。
( var select:int = Math.floor((min + max / 2)) ; var turns:int = 0); turns < input.length / 2 + 1; //etc
也不起作用。
答案 0 :(得分:2)
简单地抛弃第二个var
(在逗号之后)应该可以工作我相信会这样做:
for(var select:int = Math.floor((min + max / 2)), turns:int = 0; turns < input.length / 2 + 1; turns++, select= Math.floor((min + max / 2))){
if(input[select] > want){
max = select;
} else if (input[select] < want){
min = select;
} else {
return select;
}
}
答案 1 :(得分:0)
你是否必须将此作为for循环?这将作为递归函数更好地工作。
这里是for循环。尝试将select变量拉出for循环范围。
var select: int = Math.floor((min+max/2));
for(var turns:int = 0; turns < input.length / 2 + 1; turns++){
if(input[select] > want){
max = select;
select= Math.floor((min + max / 2))
} else if (input[select] < want){
min = select;
select= Math.floor((min + max / 2))
} else {
return select;
}
}