質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

904閲覧

breakからnilが返ってきてしまう

dadan_dan

総合スコア18

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/10/24 20:21

クラスからメソッドを呼び出すと実行結果の最後に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/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

p pikazeni.pikachu これで pikazeni.pikachu の返り値を出力してるからですね。
p を消せば nil って出なくなると思います。

投稿2018/10/24 20:36

set0gut1

総合スコア2413

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dadan_dan

2018/10/24 21:04

無事解決しました!とても助かりました…ありがとうございます。
set0gut1

2018/10/24 21:05

おめでとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問