检查数组的内容是否全部为整数
Checking if content of an array is all integers
我正在编写排序代码。我想检查我的数组是否包含非整数。这是我的代码:
array = Array.new
puts "Please enter your 3 digits."
3.times do
str = gets.chomp.to_i
array.push str.to_i
end
if array.is_a?(Numeric) == false
puts "Error, only use Integers please!"
else
print "Here are your sorted numbers: #{array.sort}"
end
使用 array
上面的代码保证包含整数,因为您使用 to_i
:
将输入转换为整数
array.push str.to_i
你实际上做了两次。当您从 STDIN 读取字符串并将其推入数组时。
您需要在调用 to_i
之前检查输入是否为字符串。
3.times do
str = gets.chomp
# code to verify if str is numeric.
array.push str
end
根据您的要求,有很多方法可以实现该代码。整数只能这样做:
unless str =~ /^\d+$/
puts "Error, only use Integers please!"
exit
end
以上适用于任何正整数,但不适用于负数。如果您允许小数,它也会失败。但它给了你一个想法。搜索 "ruby check if string is a number",您会找到更多信息。
另请注意,上面的操作会在找到非整数后立即失败,而不是等到之后。
你显然不能 gets.chomp.to_i
(或等价物,gets.to_i
),因为那只会是 return 整数。因此,在将字符串添加到数组之前,您需要先查看该字符串是否代表数字。
您可以使用正则表达式来做到这一点,或者确认 Kernel::Integer 不会引发异常(如果引发异常则捕获它)。
一个有效的正则表达式很简单:
str =~ /^-?\d+$/
之后
str = gets.chomp.strip
使用Kernel::Integer
:
def integer?(str)
begin
Integer(str)
rescue ArgumentError
return false
end
str.to_i
end
例如,
integer?("-33") #=> -33
integer?("-x33") #=> false
integer?(" 33 ") #=> 33
integer?("33\n") #=> 33
最后两个示例表明,在使用此方法时,您可以从 gets.chomp.strip
中删除 chomp.strip
。
如果您希望允许整数或浮点数,请将正则表达式更改为:
/^-?\d+\.?\d*$/
或检查 Kernel::Float 引发异常:
def float?(str)
begin
Float(str)
rescue ArgumentError
return false
end
str.to_f
end
float?("-33.4") #=> -33.4
float?("-33") #=> -33.0
float?("x33.4") #=> false
float?(" 33.4\n") #=> 33.4
我正在编写排序代码。我想检查我的数组是否包含非整数。这是我的代码:
array = Array.new
puts "Please enter your 3 digits."
3.times do
str = gets.chomp.to_i
array.push str.to_i
end
if array.is_a?(Numeric) == false
puts "Error, only use Integers please!"
else
print "Here are your sorted numbers: #{array.sort}"
end
使用 array
上面的代码保证包含整数,因为您使用 to_i
:
array.push str.to_i
你实际上做了两次。当您从 STDIN 读取字符串并将其推入数组时。
您需要在调用 to_i
之前检查输入是否为字符串。
3.times do
str = gets.chomp
# code to verify if str is numeric.
array.push str
end
根据您的要求,有很多方法可以实现该代码。整数只能这样做:
unless str =~ /^\d+$/
puts "Error, only use Integers please!"
exit
end
以上适用于任何正整数,但不适用于负数。如果您允许小数,它也会失败。但它给了你一个想法。搜索 "ruby check if string is a number",您会找到更多信息。
另请注意,上面的操作会在找到非整数后立即失败,而不是等到之后。
你显然不能 gets.chomp.to_i
(或等价物,gets.to_i
),因为那只会是 return 整数。因此,在将字符串添加到数组之前,您需要先查看该字符串是否代表数字。
您可以使用正则表达式来做到这一点,或者确认 Kernel::Integer 不会引发异常(如果引发异常则捕获它)。
一个有效的正则表达式很简单:
str =~ /^-?\d+$/
之后
str = gets.chomp.strip
使用Kernel::Integer
:
def integer?(str)
begin
Integer(str)
rescue ArgumentError
return false
end
str.to_i
end
例如,
integer?("-33") #=> -33
integer?("-x33") #=> false
integer?(" 33 ") #=> 33
integer?("33\n") #=> 33
最后两个示例表明,在使用此方法时,您可以从 gets.chomp.strip
中删除 chomp.strip
。
如果您希望允许整数或浮点数,请将正则表达式更改为:
/^-?\d+\.?\d*$/
或检查 Kernel::Float 引发异常:
def float?(str)
begin
Float(str)
rescue ArgumentError
return false
end
str.to_f
end
float?("-33.4") #=> -33.4
float?("-33") #=> -33.0
float?("x33.4") #=> false
float?(" 33.4\n") #=> 33.4