【问题标题】:Ruby If StatementsRuby If 语句
【发布时间】:2017-11-14 14:17:34
【问题描述】:
def bubble_sort(array)
    swaps = 0;
    i = 0;
    last = array.length - 1

    while swaps > -1 
        if i == last
            i = 0
            last--
            swaps = 0

            if swaps < 1
                swaps = -1
            end
        end

        if array[i] > array[i+1]
            temp = array[i]
            array[i] = array[i+1]
            array[i+1] = temp
            swaps++
        end
        i++
    end
end

这段代码有什么问题?没有逻辑错误,但我遇到了这些语法错误,不知道为什么。

bubble_sort.rb:22:语法错误,意外的keyword_end

bubble_sort.rb:26:语法错误,意外的keyword_end

【问题讨论】:

  • 您的缩进错误。解决这个问题,问题将变得更加明显。请注意,i++i-- 不是有效的 Ruby,因为它没有 ++--。您还应该避免使用无意义的; 分隔符。
  • 第一个代码块之后的end 是什么?
  • 这是针对没有正确缩进的函数。
  • 语法错误消失,++ 替换为 += 1-- 替换为 -= 1。逻辑错误仍然存​​在。
  • 我真的很想知道哪个 Ruby 教程教这些东西。我的意思是,人们从哪里知道i++ 在 Ruby 中甚至是合法的?文档中没有提到它(显然,因为它不合法),我知道的任何一本书中都没有提到它,我知道的任何教程中都没有提到它,一个人遇到语法错误的事实也应该是强烈暗示它不存在,Stack Overflow 上确实有几十个问题解释它不存在……那么谁告诉人们不存在呢?

标签: ruby if-statement while-loop conditional bubble-sort


【解决方案1】:

具有正确 ruby​​ 语法的代码将如下所示。

def bubble_sort(array)
    swaps = 0
    i = 0
    last = array.length - 1

    while swaps > -1 
        if i == last
            i = 0
            last -= 1
            swaps = 0

            if swaps < 1
                swaps = -1
            end
        end

        if array[i] > array[i+1]
            temp = array[i]
            array[i] = array[i+1]
            array[i+1] = temp
            swaps += 1
        end 
        i += 1
    end
end

我没有试图改变你的逻辑。只有语法发生了变化。我认为你应该在最后返回数组。否则输出将为零。希望这会有所帮助

【讨论】:

    【解决方案2】:

    这不是有效的 Ruby 语法:

    i++
    

    改成:

    i += 1
    

    同样地,改变这个:

    swaps++
    

    到这里:

    swaps += 1
    

    【讨论】:

      猜你喜欢
      • 2011-12-01
      • 2012-03-23
      • 2013-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 2018-01-01
      • 1970-01-01
      相关资源
      最近更新 更多