意外的$ end,期待kEND

时间:2013-09-24 05:52:33

标签: ruby syntax-error

我的任务是使用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

2 个答案:

答案 0 :(得分:7)

您在其中一个end声明中丢失了if。而不是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 

答案 1 :(得分:1)

你不能在ruby中写 else if else ,你应该写 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