程序将命令行的输入转换为数组并找到其中最大的一个

时间:2012-07-06 05:47:48

标签: ruby ruby-1.9.3

我是Ruby的新手,无法弄清楚如何从用户那里获取数组的输入并显示它。如果有人能够清楚我可以添加我的逻辑来找到最大的数字。

#!/usr/bin/ruby

puts "Enter the size of the array"
n = gets.chomp.to_i
puts "enter the array elements"
variable1=Array.new(n)

for i in (0..n)
  variable1[i]=gets.chomp.to_i
end

for i in (0..n)
  puts variable1
end  

4 个答案:

答案 0 :(得分:6)

如何在一行中捕获数组?

#!/usr/bin/ruby

puts "Enter a list of numbers"

list = gets   # Input something like "1 2 3 4" or "3, 5, 6, 1"

max = list.split.map(&:to_i).max

puts "The largest number is: #{max}"

答案 1 :(得分:3)

你做得很好。但试试这个小小的改变

#!/usr/bin/ruby

puts "Enter the size of the array"
n = (gets.chomp.to_i - 1)
puts "enter the array elements"
variable1=Array.new(n)

for i in (0..n)
  variable1[i]=gets.chomp.to_i
end

puts variable1

或者对于未定义数量的值,这里是单向

#!/usr/bin/ruby

puts "enter the array elements (type 'done' to get out)"
input = gets.chomp
arr = []
while input != 'done'
  arr << input.to_i
  input = gets.chomp
end

puts arr

答案 2 :(得分:3)

我相信这是一个更优雅的解决方案。

    puts "Please enter numbers separated by spaces:"
    s = gets

    a = s.split(" ")

    #Displays array
    puts a 

    #Displays max element   
    puts a.max

首先从用户收集一系列数字,然后在字符串上使用split方法,将其转换为数组。如果你想使用其他分隔符,比如“,”,你可以编写s.split(“,”)。之后,您可以使用逻辑来查找最大数字,或者您可以使用max方法。

答案 3 :(得分:1)

一些反馈:

  • chomp.to_i有点多余,因为后者也会删除换行符。
  • for x in y在惯用的Ruby代码中并不常见。它的行为基本上与each的行为类似,具有略微不同的范围规则,可能应该在不久前从语言中删除。
  • Ruby数组是动态的,因此无需预先初始化它们。像(1..n).map { gets.to_i }这样的东西也会生成你需要的数组。
  • 然后可以这样显示:array.each { |n| puts n }

或者,您可以使用之前概述的strip方法,将数字作为ARGV中的命令行参数,或使用ARGF加入您的程序。