0

我正在努力完成可汗學院的測驗。它要求我只在找到目標時打印總數猜測。如何將此代碼更改爲僅在發現目標時打印總猜測數

的鏈接測驗: link

/* Returns either the index of the location in the array, 
    or -1 if the array did not contain the targetValue */ 
var doSearch = function(array, targetValue) { 
    var min = 0; 
    var max = array.length - 1; 
    var guess; 
    while(min <= max) { 
     guess = Math.floor((max + min)/2); 
     if (array[guess] === targetValue) { 
      return guess; 
     else if (array[guess] < targetValue) { 
      min = guess + 1; 
     } 
     else { 
      max = guess - 1; 
      println(guess); 
     } 
    } 
    return -1; 
}; 


var primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 
       41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]; 

var result = doSearch(primes, 73); 
println("Found prime at index " + result); 

Program.assertEqual(doSearch(primes, 73), 20); 
+0

時,它已經找到了目標哪一部分的代碼運行的?你會在發生這種情況時運行'println(guess)'嗎?另外,你有一個語法錯誤。你在第一個if塊的末尾丟失了一個'}'。 –

+0

我測試了你的代碼,如果你添加缺少的'}',你的代碼在最後一行通過測試。 – davidhu2000

回答

0

嘗試增加一個全局變量保持猜的次數,並增加這每當一個新的猜測我處理。在每次新搜索開始時將其設置爲零。

當你得到那麼多時,你可以把全局變量放到doSearch函數中,並將doSearch函數的返回類型改爲數組。該數組可以保存原始返回值和猜測次數。

+0

通過提供代碼示例可以改進此答案。這樣會更清楚。 – byxor

0

你需要一個變量來保持你的猜測。 添加

var guesscount;

到您的其它變量的定義函數體內,然後在while循環通過您的if語句前加上

guesscount = guesscount + 1;

增加它。然後,您可以打印使用結果

println("Number of guesses: " + guesscount);

相關問題