【问题标题】:Ruby, `puts` doesn't print anything [duplicate]Ruby,`puts`不打印任何东西[重复]
【发布时间】:2020-09-14 03:40:24
【问题描述】:

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

【问题讨论】:

  • 你应该提供一个minimal working exampleputs 功能与合并排序无关——您可以通过删除不相关的合并排序代码来最小化该示例。更重要的是,您需要包括如何执行此代码。运行此代码的其他人将无法重现该问题。首先,执行时会发生什么:ruby -e "puts 'hey'"?
  • 我编辑了问题,写出 `ruby -e "puts 'hey'" ` 不起作用。它会导致发生错误。 ` 语法错误,意外的 tIDENTIFIER,期待 do 或 '{' 或 '(' ruby​​ -e puts "hey" ^~~~ ` 是它打印出来的。
  • 在 shell 中运行 ruby -e "puts 'hey'",而不是在 Ruby 中。你在做什么来执行你的代码?
  • 我正在使用 sublime text 3 来运行我的代码。
  • Sublime Text 3 是一个文本编辑器——它不(通常)用于执行代码。在我看来,您可能有一个完全不同的问题,但没有足够的知识来提出正确/相关的问题。

标签: ruby puts


【解决方案1】:

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

  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

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

【讨论】:

  • 我仍然没有打印出来。你还有什么建议吗?
  • 好的,我可以确认您的原始代码已损坏,并且通过我的更改,它会按照您的预期执行。但是,如果您甚至没有看到初始提示字符串,那么您的系统上的 ruby​​ 或 Sublime 都有问题。查看stackoverflow.com/questions/31185417/… 以获得可能的帮助;我不使用 Sublime,所以帮不了你。
  • 好的,我设法运行程序,但最终出现此错误:2:来自 Fross_Charles_PA2_Mergesort.rb:37:in <main>' 1: from Fross_Charles_PA2_Mergesort.rb:37:in loop' Fross_Charles_PA2_Mergesort.rb:39:in block in <main>': undefined local variable or method num' 为 main:Object (NameError)
  • 那是我的错;剪切和粘贴错误。在您看到 num 的位置将其更改为 val 以匹配其上方的变量分配。我在答案中修复了它。
猜你喜欢
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 2016-12-11
  • 2018-12-03
  • 1970-01-01
相关资源
最近更新 更多