2016-12-05 31 views
1

我試圖在基於用戶輸入的範圍之間生成一個隨機數,問題在於程序似乎在外部存儲了一個數字當我運行它時指定的範圍。在下面的示例中,我輸入8,'puts ex_val'返回247.58不應該給我任何高於170.001的東西,我在哪裏錯了?試圖在基於輸入的範圍之間生成隨機數,返回範圍以外的數

class Example 

    print "Input number between 1-12: " 
    example_range = gets.chomp 

    if example_range = 11 || 12 
    ex_val = rand(212.502..255) 
    elsif example_range = 9 || 10 
    ex_val = rand(170.002..212.501) 
    elsif example_range = 7 || 8 
    ex_val = rand(127.5..170.001) 
    elsif example_range = 5 || 6 
    ex_val = rand(84.999..127.499) 
    elsif example_range = 3 || 4 
    ex_val = rand(42.499..84.998) 
    elsif example_range = 1 || 2 
    ex_val = rand(0..42.498) 
    end 

    puts ex_val.round(1) 

end 

我嘗試使用,而不是「何時」 if語句,像這樣:

case example_range  
when 11, 12 
    ex_val = rand(212.502..255) 
... 
end 

,但似乎總是隻返回原始輸入。

+1

所以,輸出是什麼?順便說一句,你真的需要上課嗎? - )) – marmeladze

+1

我可能不會,這只是我在解決這個問題時嘗試過的很多事情之一。這是3個相似的部分之一,我只是簡單地發佈它。 – Lacomus

回答

1

if example_range = 11 || 12

是一個分配,產生具有值11example_range分配變量。 因爲這種情況是truthy你的程序不走的更遠,並返回

rand(212.502..255) 

雙等號(==)用於比較。

你的情況,你想使用類似

if [11, 12].include?(example_range) 

附:

example_range = gets.chomp 

返回一個String對象,而不是整數 - 你需要的example_range(使用to_i)與整數比較之前轉換。

+2

當然,'example_range == 11 || example_range == 12'! –

+0

好吧,我用Ken Y-N的修正以及這個,我現在正在爲「nil:NilClass(NoMethodError)」收到「未定義的方法循環」。 – Lacomus

+1

to_i修好了!謝謝 – Lacomus

0

你的代碼不適合,原因有二:

  • 首先=是賦值並不像安德烈傑伊涅科的比較已經解釋。
  • 第二個gets.chomp返回一個字符串不是一個整數。由於您嘗試將用戶輸入與整數進行比較,因此非condions可能爲true。

此外,我想建議將if ..elsif塊重構爲哈希查找。國際海事組織這使得它更容易閱讀,理解和保持:

fraction = (255/6.to_f) 
ranges = { 
    '1' => ((fraction * 0)...(fraction * 1)), 
    '2' => ((fraction * 0)...(fraction * 1)), 
    '3' => ((fraction * 1)...(fraction * 2)), 
    '4' => ((fraction * 1)...(fraction * 2)), 
    '5' => ((fraction * 2)...(fraction * 3)), 
    '6' => ((fraction * 2)...(fraction * 3)), 
    '7' => ((fraction * 3)...(fraction * 4)), 
    '8' => ((fraction * 3)...(fraction * 4)), 
    '9' => ((fraction * 4)...(fraction * 5)), 
    '10' => ((fraction * 4)...(fraction * 5)), 
    '11' => ((fraction * 5)..(fraction * 6)), 
    '12' => ((fraction * 5)..(fraction * 6)) 
} 

print 'Input number between 1-12: ' 
range = gets.chomp 

puts rand(ranges[range]).round(1)