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

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

ただいまの
回答率

88.92%

ループ文の終了について

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 2,426

sankakusan

score 14

数当てゲームで正解した時にプログラムを終了させたいのですが終わることができません。
初歩的なことで申し訳ありませんがお力添えをおねがいします。

public class Number {
public static void main (String[] args) {
System.out.println("数当てゲームをします");
for(;;){
System.out.println("一桁の数字を入力してください");
int number[] = {3,4,9};
for (int n: number){
int input = new java.util.Scanner(System.in).nextInt();
//正解した時の処理
if (input == n){
System.out.println("あたり");
System.out.println("ゲームを終了します");
break;
}
else {
System.out.println("残念もう一度");
}
}
}
}
}

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+3

breakが内側のfor文にしか効かないので、無限ループの外側のfor文を抜け出すことができません。
何らかの方法で外側のforを抜ける必要があります。対処法としては

  1. 外側のforでフラグを用意し、内側の条件でフラグを立て、内側を抜けた後判定
for(;;){ 
    System.out.println("一桁の数字を入力してください"); 
    int number[] = {3,4,9}; 
    //正解判定用フラグ
    boolean right = false;
    for (int n: number){ 
        int input = new java.util.Scanner(System.in).nextInt(); 
        //正解した時の処理 
        if (input == n){ 
            System.out.println("あたり"); 
            System.out.println("ゲームを終了します"); 
            right = true;
            break; 
        } else { 
            System.out.println("残念もう一度"); 
        } 
    } 
    if (right) {
        break;
    }
}
  1. 外側のforにラベルを設定し、内側のbreakでラベル指定する(あまりお勧めしない)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/28 13:28

    とても早い回答ありがとうございます!
    つまり無限ループではなくて条件をつけてあげればいいという解釈でよろしいでしょうか?

    キャンセル

  • 2017/05/28 13:32

    それでもいいですし、1.で判定の結果breakするという方法もありです。

    キャンセル

  • 2017/05/28 13:58

    2.で解決できましたがあまりオススメされないとのことで何度も失礼だとは存じますがお手間でなければ1、についてもう少し教えていただいてもいいですか?

    キャンセル

  • 2017/05/28 14:15

    ソースコード見ることができました
    本当にありがとうございます!
    なるほどーと関心の声しか出ません
    本当にありがとうございました!!

    キャンセル

+1

ラベル付きbreak文を使えば好きなブロックを抜けることができます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/28 14:03

    教えて頂いた方法で解決することができました。ありがとうございます!

    キャンセル

+1

個人的には無限ループ部分を関数にして return で抜ける
って方がこのみかな。ただし、場合によりけりですが。
--- 追記 ---
解決したようですね。
ちなみに、こんなコードはどうでしょうか。

public class Number {
  public static void main (String[] args) {
    System.out.println("数当てゲームをします");
    boolean keep = true;
    int number[] = {3,4,9};
    while(keep) {
      keep = quest(number);
    }
    System.out.println("ゲームを終了します");
  }
  public static boolean quest(number) {
    boolean ret = true;
    System.out.println("一桁の数字を入力してください");
    for (int n: number) {
      int input = new java.util.Scanner(System.in).nextInt();
      //正解した時の処理
      if (input == n) {
        System.out.println("あたり");
        ret = false;
        break;
      }
      else {
        System.out.println("残念もう一度");
      }
    }
    return ret;
  }
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/28 14:07

    このような初歩的な質問にお答え頂いてありがとうございます。

    キャンセル

  • 2017/05/28 17:55

    (・∀・)b

    キャンセル

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

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る