ruby - 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
解决方案
您的输入代码有几个问题。
gets
返回所有用户输入,包括换行符。因此,您的循环条件正在比较"-1"
,"-1\n"
因此永远不会结束。调用.chomp
输入将解决这个问题。- 您
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
好消息是,一旦您解决了输入问题,您的合并排序方法似乎就可以工作了。
推荐阅读
- javascript - 防止在反应中重新渲染数组内的某些组件
- powerbi - Power BI Count 包含“2”的列的总数
- wpf - 如何为 WPF 安装和使用 Lottie/JSON 动画代码
- flutter - Flutter:在 Stack() 场景中使用 CheckboxListTile() 和 Positioned() 时出现问题
- asp-classic - 如何在url中传递无法直接在url中执行的值参数?
- jquery - 如何使用 DOM 获取内容
- reactjs - 模块联合(意外令牌 '!==' main.js:619)
- java - 错误:使用 cicd 将 maven 项目部署到应用引擎 gg 云时,无法找到或加载主类 org.apache.maven.wrapper.MavenWrapperMain
- reactjs - 使用 React JS 提供静态文件
- javascript - 将素材ui的菜单移到页面的最左侧