2015-10-06 24 views
-2

我试图编写if条件,该条件接受字符串数组(如果其所有元素均为数字)。如果它不是由数字组成,它应该返回"incorrect input"else。之后,我会将这些数字转换为整数以获得平方根。这是我写的:仅当它由数字组成时才接受字符串数组

def square(string) 
if string =~ /^\d+$/ 
    m = string.split(",").map(&:to_i).sort 
    if m.count == 4 && m.each_cons(2).all? {|a, b| b == a + 1 } 
    d = m.inject{|c,v| c*v} 
    g = d + 1 
    r = Math.sqrt(g).to_i 
    puts "#{g}, #{r}" 
    else 
    puts 'not consecutive' 
    end 
else 
puts 'incorrect input' 
end 
end 

square("3,0,1,0") 
+1

'字符串==/^ [\ d] $ /''变成[] ==/^ [\ d] $ /'。空数组是否等于正则表达式(对象)?所以总是返回'false'。另外,'if'需要一个'end'。 –

+0

通过字符串循环,并为任何特定的字符串...''specific_string“.match(/^[0-9] * $ /)。to_s.size ==”specific_string“.size' –

+0

你打算'串'是数组,字符串还是正则表达式? – sawa

回答

-1

正则表达式/^\d+$/只检查一个整数。您需要执行以下操作:

/^\d+(,\d+)*$/ 

包括逗号。

此外,如果要包括实数:

/^\d+(\.\d+)?(,\d+(\.\d+)?)*$/ 
+0

很难说* OP需要什么,因为没有输入数据或期望的输出,代码也不能远程清楚'string'是什么。在提供这些东西之前,一切都是猜测。 –

+0

谢谢!有效。 – mdalmau

+0

它确认'4.54.234.234.234'正确,但它不应该。为什么人们喜欢缩短重复? '^ \ d +(\。\ d +)?(,\ d +(\。\ d +)?)* $'('token(separator token)*')是写这些结构的标准方法。 – nhahtdh

-2

所以这不会工作,因为你只留下一个数字的空间。您需要在\ d后添加一个+以允许任意数量的数字。加号表示正则表达式检查一个或多个符合加号前面的字符。你可以做到这一点:

if string =~ /^\d+$/ 
    do_stuff 
end 
+2

很难说* OP需要什么,因为没有输入数据或期望的输出,代码也不能远程清楚'string'是什么。在提供这些东西之前,一切都是猜测。 –

+0

是的,我想你是对的。我会更小心地给出推测性答案。 –