Ruby,`puts'不会打印任何内容

问题描述

我是第一次使用Ruby编写程序,我为我的Programming Languages类分配了此作业,在该类中,我必须将Mergesort实现到Ruby中,以便用户可以输入自己选择的数字数组并以-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

解决方法

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

  1. gets返回 all 用户输入,其中包括换行符。因此,您的循环条件是将"-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

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