2011-09-30 48 views
0

我正在嘗試在for循環中執行二進制搜索。但是,閃存不喜歡以下循環。for循環中的多個語句(1084錯誤)

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 

也不起作用。

回答

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; 
    } 
} 
+0

謝謝!我忘了關於聲明多個變量,而不需要另一個變量。 – apscience

0

你是否必須這樣做for for循環?作爲遞歸函數,這會更好。

這裏是一個for循環。嘗試將選擇變量拉到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; 
    } 
} 
+0

我做codeKata二,大約是用不同的方式做的二進制搜索。 :) – apscience