2011-09-23 48 views
4

我已經得到了這個方法,我寫了n次用戶輸入使用while循環裏面。 這個想法是非常簡單和普通,重複while循環,如果條件爲真, 的問題是,它不工作...我該如何解決這個Ruby是/否風格循環?

def play_again? 
    flag = true 
    while flag 
    print "Would you like to play again? [y/n]: " 
    response = gets.chomp 
    case response 
     when 'y' 
     Game.play 
     when 'n' 
     flag = false 
    end 
    end 
    flag 
end 

play_again? 

因爲它的立場只會成功重複一次,然後退出,而不是繼續循環,請你告訴我什麼是錯的? (對不起,如果這是一個n00b的問題,畢竟我是紅寶石n00b)

謝謝。

+2

只是想在一個Ruby控制檯你的代碼,如果你用'看跌期權代替'Game.play'它工作正常 –

+1

「打......」'它的工作原理精細。你的「遊戲」中的某些東西正在搞亂。 – steenslag

+0

你是對的,你們倆。顯然Game.play是返回零 我沒有意識到這可能是一個因素,因爲循環變量是'不相關的' – jlstr

回答

14

可能出現的問題:

  • 檢查Game.play
  • 資本/無資本的答案嗎? - >字符串#upcase或字符串#downcase
  • 隱藏的空間(前/答案後) - >字符串#條代替字符串#格格

您也可以使用正則表達式(例如N)或與列表答案(是),檢查答案:

def play_again? 
    while true 
    print "Would you like to play again? [y/n]: " 
    case gets.strip 
     when 'Y', 'y', 'j', 'J', 'yes' #j for Germans (Ja) 
     puts 'I play' # Game.play 
     when /\A[nN]o?\Z/ #n or no 
     break 
    end 
    end 
end 

play_again? 
+0

你的循環比較好,更加修剪和習慣。我感謝你讓我意識到如何做好,基本上,我的版本幾乎可以。再次感謝。 – jlstr