2015-10-06 46 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

是的,我想你是對的。我會更小心地給出推測性答案。 –