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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1136閲覧

java for文について 途中で繰り返しが終わってしまいます。

santyan71

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/05/08 15:01

編集2021/05/08 15:02

前提・実現したいこと

敵のHPを0にして終わりたい

発生している問題・エラーメッセージ

int enemy_hp = 1000;のところを1000ではなく、100にした場合敵のHPを削り切れることがあるのですが、
1000だと削れ切れずに途中でfor文のループが終わることが多いです。
一応コンパイルも通りますし、実行もできます。

該当のソースコード

import java.util.*;

public class memo{

public static void main(String[] args){ System.out.println("名前を入力してください"); String name =new java.util.Scanner(System.in).next(); System.out.println("好きな食べ物を2つ入力してください"); String food1 =new java.util.Scanner(System.in).next(); String food2 =new java.util.Scanner(System.in).next(); System.out.println(""); int enemy_hp = 1000; for(int i = 0;i < enemy_hp;i++){ enemy_hp -= attack(name); if(enemy_hp < 0){ System.out.println("敵のHPは残り" + 0 + "です");//敵の体力を0で終わらせるコード }else{ System.out.println("敵のHPは残り" + enemy_hp + "です"); } System.out.println(""); }//繰り返して敵の体力を削る System.out.println(""); System.out.println(name + "は敵を倒した"); System.out.println(""); System.out.println("敵は宝箱を落とした"); System.out.println(""); chest(name, food1, food2); } public static int attack(String player){ System.out.println(player + "はモンスターを攻撃した"); int rand = (int)(Math.random()* 7 + 1);//1~7までのサイコロ if(rand == 1){ int miss = 0; System.out.println(miss + "のダメージ!攻撃失敗!"); return miss; }else if (rand == 7){ int critical = 100; System.out.println("急所に当たった!"+ critical + "のダメージを与えた"); return critical; }else { int dmg = (int)(Math.random()* 50 + 1);//1~50のダメージ System.out.println(dmg + "のダメージを与えた"); return dmg; } } public static void chest(String player, String fd1, String fd2){ ArrayList<String> box = new ArrayList<>(Arrays.asList("塩タン")); box.add(fd1); box.add(fd2); Collections.shuffle(box); System.out.println(player + "は宝箱から" + box.get(0) + "を手に入れた"); }

}

試したこと

mainメソッドのfor文の条件式あたりが怪しいと思っていろいろいじってみたのですがうまくいきませんでした。助けてください。

補足情報(FW/ツールのバージョンなど)

・sakuraエディター
・コマンドプロンプト

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

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

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

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

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

guest

回答1

0

ベストアンサー

for文の条件式がi < enemy_hpとなっていますがi++によりループごとにiが増えてしまい,if文に引っかかる前にループから抜けてしまいます

java

1for(int i = 0;i < enemy_hp;i++){ 2//

ではなく

java

1while(true){ 2// 3 if(enemy_hp <= 0){ 4 System.out.println("敵のHPは残り" + 0 + "です"); 5 break;

にすべきでしょう
不等号も修正しました

投稿2021/05/08 15:14

taC-h

総合スコア289

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

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

santyan71

2021/05/08 15:22

ありがとうございます。 うまく動くようになりました! まだfor文の認識が甘いようなので、本を読みなおそうと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問