通过用户输入添加/删除数组中的数字

时间:2014-03-23 04:28:31

标签: ruby

我想根据用户输入在数组中添加/删除数字。这就是我的尝试:

a = %w[1 2 3 4 5 6 7 8 9]
delete_list = []

puts a
puts "pick 1-9 to del"
input = gets.to_i
input << a
puts a

最后一行是检查它是否有效,我得到"no implicit conversion of Array into Integer"。这是因为我使用%w并且数组不是基于整数的吗?


a = %w[1 2 3 4 5 6 7 8 9]
a.map! {|e| e.to_i}

puts a
puts "pick 1-9 to del"
input = gets.chomp

a.delete(input)

puts a

好吧,我这样改了。但我似乎没有成功使用a.delete(输入)命令,因为我的阵列仍打印出1-9。我究竟做错了什么?

3 个答案:

答案 0 :(得分:0)

要删除特定位置的元素,请使用Array#delete_at

input = gets.to_i
a.delete_at(input - 1) # index starts from `0`

如果您想要按位置而不是按值删除项目,请使用Array#delete

input = gets.chomp # `a` contains strings; used `.chomp` instead of `.to_i`
a.delete(input)

答案 1 :(得分:0)

是。这是因为Fixnum#<<的参数必须是整数,而不是数组。

答案 2 :(得分:0)

关注代码的关键行:

a = %w[1 2 3 4 5 6 7 8 9]

这使变量&#34; a&#34;一个字符串元素数组:

 => ["1", "2", "3", "4", "5", "6", "7", "8", "9"]

然后设置此变量:

input = gets.to_i

这会从用户获取一个字符串(&#34;获取&#34; - 就像名称getStringFromUser的缩写),然后.to_i将其转换为整数。 这可能会导致&#34; 0&#34; (如果输入了字母)或输入的任何整数: =>0=> #some integer

然后你试图将一个数组放入整数:

input << a

Ruby试图采用&#34; a&#34;元素数组(类Array)并将其塞入该整数(aka:class Fixnum)变量&#34;输入&#34;。这是你得到错误的地方 - Ruby不能使用类似&#34;&lt;&lt;&#;&#34;这样的方法将数组放入整数。

如果您更换了该行:

input << a

使用:

a << input

你至少会得到一个功能性的结果。 如果&#34;得到&#34;是的,输入= 9,然后你的最后puts a会给你:

=> ["1", "2", "3", "4", "5", "6", "7", "8", "9", 9] 

这是一个Array元素,由一串字符串元素和一个推到最后的整数元素组成。

现在,从puts "pick 1-9 to del"开始,您似乎想从数组中删除一个元素。

首先,您希望您的数组是整数而不是字符串...类似于:

a.map! {|e|e.to_i}

=&GT; [1,2,3,4,5,6,7,8,9]

(如果你没有将输入转换为整数,你可以跳过最后一步......或者奇怪地将&#34;输入&#34;转换回带有input.to_s的字符串)

现在&#34; a&#34;是一个整数数组,你可以使用&#34; delete&#34;删除一个整数。数组的方法并告诉它删除&#34;输入&#34;的值。变量:

a.delete(input)

=> 9  

#it返回您删除的值。

您的上次puts a会返回:

   => [1, 2, 3, 4, 5, 6, 7, 8]

这是一个很长的步骤,但希望这会有所帮助。