2013-09-24 54 views
1

我的任務是使用Ruby製作更高效的二進制搜索代碼。我跟着從這個鏈接的邏輯: http://www.cprogramming.com/discussionarticles/sorting_and_searching.html

我的代碼如下:

def bsearch(a, k) 

    lower = 0 
    upper = a.length-1 

    while a[upper].to_f> k.to_f and a[lower].to_f< k.to_f 
    low_diff = k.to_f -a[lower].to_f 
    range_diff = a[upper].to_f-a[lower].to_f 
    count_diff = upper-lower 
    range = low_diff/range_diff * count_diff + lower 

    if k==a[lower] 
     return lower 

    if k.to_f > a[range].to_f 
     lower = range+1 
    else if k.to_f < a[range].to_f 
     upper =range 
    else  
     lower = range 
    end 

    end 
end 

我仔細檢查,但我不知道爲什麼我一直在經歷的跟隨着錯誤:

unexpected $end , expecting kEND 

回答

6

您在if聲明之一中丟失了end。而不是else if,在Ruby中的關鍵字是elsif

if k==a[lower] 
    return lower 
end        #lost this end 
if k.to_f > a[range].to_f 
    lower = range+1 
elsif k.to_f < a[range].to_f #use elsif 
    upper =range 
else  
    lower = range 
end 
+0

嗨俞灝,我的成績產量nill要返回數組中的位置,請幫助 – user2445971

+0

@ user2445971這是一個不同的問題,因爲我只在發佈答案時檢查了編譯錯誤。最好問一個關於它的新問題。 –

1

你不能寫不然,如果紅寶石那麼當它假設寫ELSIF

def bsearch(a, k) 

    lower = 0 
    upper = a.length-1 

    while a[upper].to_f> k.to_f && a[lower].to_f< k.to_f 
    low_diff = k.to_f -a[lower].to_f 
    range_diff = a[upper].to_f-a[lower].to_f 
    count_diff = upper-lower 
    range = low_diff/range_diff * count_diff + lower 
    if k==a[lower] 
     return lower 
    end 
    if k.to_f > a[range].to_f 
     lower = range+1 
    elsif k.to_f < a[range].to_f 
     upper =range 
    else  
     lower = range 
    end 
    end 
end 
+0

嗨,我仍然得到同樣的錯誤 – user2445971

相關問題