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

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

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

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

Q&A

解決済

2回答

311閲覧

if文が機能しません。どこが間違っているのでしょうか?

imatya999

総合スコア38

Java

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

0グッド

0クリップ

投稿2019/03/20 06:09

前提・実現したいこと

「レベルが40以上なら魔王を倒す」という
プログラミングを実現させたい

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

「2」を押すと修行してレベルが5ずつ増えるのですが 40以上になっても、「GAME CLEAR!」が表示されません。

該当のソースコード

public class Maougame { static String name = "勇者"; static int lv = 30; // 最初のレベル public static void main(String[] args) throws java.io.IOException { putJoshou(); putCommand(); if(lv<40) { putGameOver(); } else { putGameClear(); } } public static void putCommand() throws java.io.IOException { System.out.println("1.魔王を倒しに行く"); System.out.println("2.修行する"); int c = System.in.read(); if( c=='1' ) { System.out.println("魔王が現れた"); }else if( c=='2' ) { lv += 5; System.out.println("レベルが" +lv + "になった"); putCommand(); } else { System.out.println("正しく入力しろこのタコ"); putCommand(); } } //序章の表示 public static void putJoshou() { System.out.println("魔王が世界を滅ぼそうとしています"); System.out.println(name + "はレベル" + lv + "のツワモノです"); } //ゲームオーバー public static void putGameOver() { System.out.println(name + "は魔王に負けました"); System.out.println("Game Over"); } //ゲームクリア public static void putGameClear() { String s0 = name + "は魔王を倒しました"; put(s0); System.out.print("レベル" + lv); if(lv > 200) { put("なので瞬殺でしたwww"); } else if(lv>120) { put("なので楽勝でした"); }else if(lv>80) { put("なのでトントンでした"); }else if(lv>50) { put("なので苦労しました"); }else { put("なので死ぬかと思いました"); } System.out.println("GAME CLEAR!"); } public static void put(String str) { System.out.println(str); } }

試したこと

このサイトで勉強しています。
https://www.youtube.com/watch?v=VOgJReIXcng
動画の最後にコードの全文が表示されて、一応確認はしました。
何度見ても、間違っているように思えないのですが・・・。

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

作業はeclipseでやっています

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

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

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

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

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

azuapricot

2019/03/20 06:14

ゲームクリアは表示できなくてもゲームオーバーは表示できてるんですか?
m.ts10806

2019/03/20 06:26

インデントはきちんと揃えてください。 インデントぐちゃぐちゃのコードはバグの温床です。デバッグもしづらくなります。 (質問に提示するためではなく自身のコードをそろえてから質問に提示してください。
S_kawa

2019/03/20 06:51

仕様を勘違いしてるのでは…? 2を押し続けて40超えたらクリアではなく、40超えた状態で1を押したらクリアですよ。
imatya999

2019/03/20 07:14

>40超えた状態で1を押したらクリアですよ ・・・あ・・・あれ!?汗 もしかして自分、とっても恥ずかしい勘違いしていたのかも???
jimbe

2019/03/20 08:10

延々と修行するとどこまでレベルが上がるでしょう^^;
shinami

2019/03/20 13:18

>imatya999さん 勘違いは誰にでもあるので別に気にはなりません。 lv2147483647ぐらいになったら魔王が勝手に現れて勝手に倒れ put("なのでトントンでした");というのも良い手かもしれません。
momon-ga

2019/03/20 13:44

>40超えた状態で1を押したらクリアですよ つまり、41以上じゃないと倒せないのに「レベルが40以上なら魔王を倒す」というプログラミングっていってるところ(表現)が気になる。
guest

回答2

0

text

1魔王が世界を滅ぼそうとしています 2勇者はレベル30のツワモノです 31.魔王を倒しに行く 42.修行する 52 6レベルが35になった 71.魔王を倒しに行く 82.修行する 9正しく入力しろこのタコ ← これが問題(改行が入っています) 101.魔王を倒しに行く 112.修行する 122 13レベルが40になった 141.魔王を倒しに行く 152.修行する 16正しく入力しろこのタコ 171.魔王を倒しに行く 182.修行する 192 20レベルが45になった 211.魔王を倒しに行く 222.修行する 23正しく入力しろこのタコ 241.魔王を倒しに行く 252.修行する 261 27魔王が現れた 28勇者は魔王を倒しました 29レベル45なので死ぬかと思いました 30GAME CLEAR! 31

java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

投稿2019/03/20 06:51

cateye

総合スコア6851

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

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

imatya999

2019/03/20 07:37 編集

あれ、正しく表示されていますね。 コード自体は間違ってないってことですね。。。。 ありがとうございました。
guest

0

ベストアンサー

張って頂いたプログラムをコンパイルしたところ当方環境では GAME CLEAR が表示されました。
しかし、コマンドを1度入力する毎にエラーが表示されていた為、 putCommand() を以下のように修正しました。
なお、System.in を使用する場合は、 Scannerクラスを使用すると便利です。

public static void putCommand() throws java.io.IOException { System.out.println("1.魔王を倒しに行く"); System.out.println("2.修行する"); // バッファに溜まっている分を読み捨てる System.in.read(new byte[System.in.available()]); // ここで 2[ENTER] のように入力すると、2 の分の入力のみが読み込まれ // [ENTER]が次で読まれてしまう int c = System.in.read(); if( c=='1' ) { System.out.println("魔王が現れた"); }else if( c=='2' ) { lv += 5; System.out.println("レベルが" +lv + "になった"); putCommand(); } else { System.out.println("正しく入力しろこのタコ"); putCommand(); } }

当方の環境は以下の通りです。

java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_144-b01) Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

投稿2019/03/20 06:37

YakumoSaki

総合スコア2027

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

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

imatya999

2019/03/20 07:38 編集

やはり、問題なかったですか。 ま、ひとまず安心しました。 ありがとうございました。 ※それ以外のエラーは、勉強中の動画の「次の章」で修正されるみたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問