質問: new Review0810("Peter", 160810); //コンストラクタに引数をわたす peter.eat(); //eat()メソッドを呼ぶ if(peter.eat()){ //eat()メソッドの実行内容によって表示文が変わるようにする System.out.println(peter.getName() + "は食事をとりました。"); }else{ System.out.println(peter.getName() + "は満腹の為食べれませんでした。"); } if(peter.run()){ //run()メソッドの実行内容によって表示文が変わるようにする System.out.println(peter.getName() + "は走りました。"); }else{ System.out.println(peter.getName() + "は空腹の為走れませんでした。"); } System.out.println("Peterの満腹度は" + peter.getManpukudo()+ "です。"); ``` ### 試したこと コードがきちんと保存されているか確かめました。 保存はできていました。 ### 補足情報(言語/FW/ツール等のバージョンなど) より詳細な情報
回答: manpukudoは最初50で、その次、ifの前のeatでmanpukudoは100になります。 その状態でifの中で再びeatが実行されます。manpukudoは100なのでifに入れず、falseを返します。 > > 3run()メソッドは実行されていないのに2行目の文章がでていること。 > > > if文の中で実行されています。で、このeatおよびrun双方に穴があります。 どちらも、2つ目の条件を満たさなければ(eatの場合、満腹度を増加させた結果が100を超えなかった場合、runの場合、満腹度を減少させた結果が0未満にならなかった場合)、trueを返すことはありません。 本来であれば、満腹度を操作した時点、つまり1つ目のifに入った時点でtrueに切り替えるべき場面です。 なお、私なら2回条件判断するのが面倒なので、こうしたいですね。 ``` public boolean eat() { if(manpukudo >= 100) { return false; } manpukudo = Math.min(manpukudo + 50, 100); //manpukudoに50を加えた結果が100を超えたら100に設定される return true; } public boolean run() { if(manpukudo <= 0) { return false; } manpukudo = Math.max(manpukudo - 40, 0); //manpukudoから40減じた結果が0以下になったら0に設定される return true; } ```