2012-11-07 161 views
7

我目前在學習ruby,而且我已經陷入了這個問題:紅寶石無限循環

寫一個聾人祖母程序。無論你對奶奶說什麼(無論你輸入什麼內容),她都應該回應HUH? SPEAK UP,SONNY!,除非你喊出來(輸入所有大寫字母)。如果你大喊,她會聽到你的回聲,不,從1938年起!爲了讓你的節目真正可信,每次奶奶都會有不同的年份;也許任何一年在1930年和1950年之間的任何一年。你不能停止與奶奶說話,直到你喊BYE。

這是我試過的代碼:

puts "Say something to Grandma!" 
something = gets.chomp 
while something != "BYE" 
    if something == something.upcase 
     puts "NO, NOT SINCE 19" + (rand(30..50)).to_s + "!" 
    else 
     puts "HUH? SPEAK UP SONNY!" 
    end 
end 

每當我執行此,if和else字符串只是去一個無限循環。我在這裏做錯了什麼?

+4

我不會說紅寶石,但你''''一次*然後*開始'while'。這必然會導致無限循環,因爲'something'永遠不會改變。你可能不得不進入'while'語句,所以每次都會得到。另外'chomp'是我用腳本語言見過的最酷的命令。 –

+1

@Pekka:'chomp' - 掐掉換行符。 'gets' - 這個獲得用戶輸入。備查。 :) –

+0

另外,字符串插值。 –

回答

6

你只得到了一次輸入,你需要在每一個循環的開始讀它,就像這樣:

something="" 
while something != "BYE" 
    puts "Say something to Grandma!" 
    something = gets.chomp 
    if something == something.upcase 
     puts "NO, NOT SINCE 19" + (rand(30..50)).to_s + "!" 
    else 
     puts "HUH? SPEAK UP SONNY!" 
    end 
end 

希望是有道理的。

+0

當我嘗試以下代碼時出現以下錯誤:calc.rb:1:'

':未定義的局部變量或方法'something'for main:Object(NameError ) – user1429496

+0

對不起,在頂端添加'something =「」',看看編輯 – javanut13

+0

真棒,謝謝! – user1429496