首页 > 解决方案 > Ruby,`puts` 不打印任何东西

问题描述

我是使用 Ruby 写作的新手,我的编程语言类有这个作业,我必须在 Ruby 中实现 Mergesort,以便用户可以输入他们自己选择的数字数组并以 -1 结尾。我以为我已经正确编写了所有内容,没有报告任何错误,但程序没有打印任何内容。

这是代码的重要部分:

puts "Please enter as many numbers as you would like followed by -1"

Many_Numbers = Array.new
  x_1 = '-1'
while gets != x_1
  Many_Numbers.push gets
end

sorted = merge_sort(Many_Numbers)
puts "SORTED CORRECTLY: #{sorted == Many_Numbers.sort}\n\n#{Many_Numbers}\n\n#{sorted}"

就像我说的,没有任何东西被打印出来,甚至是 puts 方法中提供的东西,所以我没有任何东西可以显示错误。我在这里做错了什么?

编辑:在我有改进这部分代码的想法后,我编辑了代码,但我仍然一无所获。这就是我改变的

puts "Please enter as many numbers as you would like followed by -1"

Many_Numbers = Array.new

input = gets
while input != -1
  case response
    when input != -1
      Many_Numbers.push(input)
    when input == -1
    end
  end

标签: rubyputs

解决方案


您的输入代码有几​​个问题。

  1. gets返回所有用户输入,包括换行符。因此,您的循环条件正在比较"-1""-1\n"因此永远不会结束。调用.chomp输入将解决这个问题。
  2. gets为每个有效数字调用了两次——一次在循环条件中,一次在您实际将值推入数组时。这会导致每两个条目中的一个丢失。使用loop do带有中断条件的构造可以解决该问题。
END_OF_LIST = '-1'

puts "Please enter as many numbers as you would like followed by -1"

Many_Numbers = Array.new
loop do
  val = gets.chomp
  break if val == END_LIST
  
  Many_Numbers.push val
end

好消息是,一旦您解决了输入问题,您的合并排序方法似乎就可以工作了。


推荐阅读