# Methods for calculating
# print out the input that the user entered
def PrintScores(*numbers)
numbers.each {|x| print x.join(" ")}
puts
end
#print out the scores in ascending order
def ListScores(*numbers)
numbers.sort!
print numbers
end
# Main function
out_file = File.new("out.txt", "w")
puts "Enter the scores you wish to have our stats program look into? "
user_input = gets.chomp
input_array = user_input.split(" ")
input_array.map! do |x|
x.to_i
end
PrintScores(input_array)
ListScores(input_array)
ListScores
函数仍然按照我输入的顺序打印数组,我无法弄清楚原因。
答案 0 :(得分:2)
ListScores函数仍然按照我输入的顺序打印数组,我无法找出原因?
在当前代码中,input_array
是Array
类的实例,它作为参数传递给ListScores
方法。 ListScores
期待splat arguments
,因此numbers
成为包含单个数组元素的数组(即input_array
内容)。这是您在尝试对数组进行排序时以相同顺序查看数组的原因。
例如:
> user_input = gets.chomp
3 2 8 5 1
=> "3 2 8 5 1"
> input_array = user_input.split(" ")
=> ["3", "2", "8", "5", "1"]
> input_array.map! do |x|
> x.to_i
> end
=> [3, 2, 8, 5, 1]
> ListScores(input_array)
[[3, 2, 8, 5, 1]] => nil ## Notice Array with single Array element [[]]
当您需要变量参数列表时, splat operator
(*
)用于方法。
在您的情况下,您不需要PrintScores
和ListScores
方法中的splat运算符。
def PrintScores(numbers) ## <-- Removed splat operator
numbers.each {|x| print x.join(" ")}
puts
end
#print out the scores in ascending order
def ListScores(numbers) ## <-- Removed splat operator
numbers.sort!
print numbers
end
示例输出:
> ListScores(input_array)
[1, 2, 3, 5, 8] => nil
注意:建议使用 snake_case 作为方法名称,例如list_scores
而不是ListScores