2015-05-03 21 views
-1

我想做一個二進制搜索容差值爲0.1,但我不斷收到此編譯錯誤沒有這種方法Math.abs(布爾)。當我谷歌搜索堆棧建議使用兩個Math.abs,但也沒有工作。請幫助我這個。我被困在這一點很長時間BinarySearch由公差

    final double TOLERANCE = 0.1;       
        else if(time==r[mid]) 
       { 
        System.out.println("found"+mid); 
        return Math.abs(r[mid])-Math.abs(r[mid-1])<TOLERANCE); 

       } 

回答

1

問題是這部分Math.abs(r[mid-1]<TOLERANCE)。您試圖從布爾表達式的結果中獲取絕對值。

+0

因此,括號應該在之前< –

+0

,因此無法工作。也許你的意思是'Math.abs(r [mid-1])'並把括號放在錯誤的地方?我不清楚你正在用TOLERANCE測試做什麼,所以我不認爲我能告訴你''''應該在哪裏。 – krock

+0

我是tryong來搜索9.4,如果它發現像9.3一樣,它應該返回在該索引找到的值 – ananymous59

1

的一個,沒有編譯錯誤,會讀

return (Math.abs(r[mid]) - Math.abs(r[mid-1])) < TOLERANCE; 

我添加可能不是必要的,但是他們更加清楚的括號內。

我認爲計算仍然是錯誤的。這是更清晰和更好的方法。

double difference = r[mid] - r[mid-1]; 
return Math.abs(difference) < TOLERANCE; 

絕對是差異,所以無論它是減法的正面還是負面的結果都沒關係。

這就是說,Math.abs甚至需要如果您的物品是訂購?