クラスからメソッドを呼び出すと実行結果の最後にnilが表示されてしまいます。
rubyでloop処理を用いたメソッドを作っています。
クラスからメソッドを呼び出すと実行結果の最後にどうしてもnilと表示されてしまいます。loopを中断する為にbreakを設定していて、そこからnilが返ってきているようなのですが、なぜnilが表示されるのか理由がよく分からず困っています。
下の実行結果の「ゼニガメ瀕死、、ピカチュウの勝利!!」で終わらせたいのですが、どうしても最後にnilが出てきてしまいます。
発生している問題・エラーメッセージ
ruby ***************************** 戦闘開始 ***************************** --------------- 第1戦 --------------- ピカチュウの残りHP: 30 ゼニガメの残りHP: 37 --------------- 第2戦 --------------- ピカチュウの残りHP: 30 ゼニガメの残りHP: 24 --------------- 第3戦 --------------- ピカチュウの残りHP: 30 ゼニガメの残りHP: 11 --------------- 第4戦 --------------- ピカチュウの残りHP: 30 ゼニガメの残りHP: -2 ***************************** 決着!!! ***************************** ゼニガメ瀕死、、ピカチュウの勝利!! #ここで終わらせたいです nil # これが謎です
該当のソースコード
ruby class Pokemon attr_accessor :pikaattack, :pikahp, :zeniattack, :zenihp def initialize(pikaattack, pikahp, zeniattack, zenihp) @pikaattack = pikaattack @pikahp = pikahp @zeniattack = zeniattack @zenihp = zenihp end def pikachu puts "*****************************", "戦闘開始", "*****************************" zehp = @zenihp piat = @pikaattack i = 0 loop do sleep(1) i += 1 sum = zehp - ( piat * i ) puts "---------------", "第#{i}戦", "---------------", "ピカチュウの残りHP: #{@pikahp}","ゼニガメの残りHP: #{sum}" if sum <= 0 break end end sleep(2) puts "*****************************", "決着!!!", "*****************************", "ゼニガメ瀕死、、ピカチュウの勝利!!" end end pikazeni = Pokemon.new(13, 30, 6, 50) p pikazeni.pikachu
すごい見辛いコードですみません。loopでゼニガメのHPからピカチュウのattackを引いていって、ゼニガメのHPが0になったらbreakでループを中断する、というメソッドを作成しているつもりです…。
インスタンスの引数は左から(ピカチュウの攻撃力[attack]、ピカチュウのHP,ゼニガメの攻撃力、ゼニガメのHP)になってます。
試したこと
どうもbreakからnilが返ってきているようで、breakに引数(?)を渡してみたりしたのですが、どうしてもnilが最後についてしまいます。
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/24 21:04
2018/10/24 21:05