Javaで繰り返しの分岐

解決済

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 1,016

Tazusa

score 39

  • リスト
    Javaで整数AとBを入力し、たすプログラムを作っています。
    ここからが問題なのですが、
    足し終わった後にもう一度繰り返すなら1、やめるなら0、それ以外を入力したなら"もう一度入力してください。"と表示させたいのです。

しかし、書いた時点で分かっていたのですが、以下のコードでは、もう一度入力した時点で終ってしまいます。
System.out.println("続けるなら1、やめるなら0");
の前にdo{ を入れ、while で閉じればよいのかなどいろいろやってみましたが、結局わかりませんでした。

もういちど入力した後に"続けるなら1、やめるなら0"を表示させ、1か0を入力させるようにするにはどうすればよいでしょうか。

import java.util.Scanner;

public class Chap2 {
    public static void main(String [] args) {
        Scanner stdIn = new Scanner(System.in);

        int a;
        int b;
        int retry;

        do {

        System.out.print("整数A ");
        a = stdIn.nextInt();

        System.out.print("整数b");
        b = stdIn.nextInt();

        System.out.println("a+b=" + (a+b));


        System.out.println("続けるなら1、やめるなら0");
        retry = stdIn.nextInt();

 }while (retry ==1);

    if (retry !=1 && retry != 0) {
        System.out.print("もう一度入力してください。");
    }

    else
         System.out.println("終了します。");
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

checkベストアンサー

+2

今のコードを活かすなら、次のようにすればいいんじゃないでしょうか。

do {
    ...

    続けるなら1、やめるなら0
    retry = 入力

    while(retryが1でも0でもない) {
        もう一度入力してください
        retry = 入力
    }
} while(retryが1);

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/01/20 22:02

    動かすことができました。
    括弧とじに関しては、2つ以上while を使った場合無条件で毎回閉じなければいけないかと思っていましたが、そうではなかったですね。もっと道理を考えて書いていきたいと思います。
    ありがとうございました。

    キャンセル

  • 2018/01/21 17:04

    @Tazusa さん
    解決出来たようで何よりです。
    じっくり理解することが一番の近道なのですが、忘れられがちですよね。

    キャンセル

  • 2018/01/21 17:07

    あと、どなたか分かりませんが、低評価を付けた方がいらっしゃいます。
    評価自体はもちろん自由にしていただいて構わないのですが、私としては思い当たりのない低評価ですので、改善すべき点をコメントしてくださると助かります。

    キャンセル

+1

計算処理、リトライ制御処理をなるべく分離させてみました。
main() が、ひと目で、 計算処理をリトライ判定が true を返すあいだ 繰返す実行することがわかる記述になってます。
また、リトライ判定の処理を変更する (各種メッセージの出力タイミングやメッセージ内容)の変更もしやすくなっています。
また、retory 処理部では、数字以外の文字を入れた場合にもエラーにならないようにしています。

Chap2.java

import java.util.Scanner;

public class Chap2 {
    public static void main(String[] args) {
        Scanner stdIn = new Scanner(System.in);
        do {
            task(stdIn);
        } while (retry(stdIn));
    }

    static void task(Scanner stdIn) {
        System.out.print("整数A ");
        int a = stdIn.nextInt();

        System.out.print("整数B ");
        int b = stdIn.nextInt();

        System.out.println("a+b=" + (a + b));
    }

    static boolean retry(Scanner stdIn) {
        while (true) {
            System.out.println("続けるなら1、やめるなら0");
            switch (stdIn.nextLine().trim()) {
            default:
                System.out.print("もう一度入力してください。");
                break;
            case "1":
                return true;
            case "0":
                System.out.println("終了します。");
                return false;
            }
        }
    }
}

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/01/21 20:35

    回答ありがとうございます。
    まだ勉強が進んでいないところがかなりあるので、今の時点でkatoyさんの書かれたものの理解はあまりできていません。しかし勉強が進んだ時もう一度見直したいと思います。
    再度になりますがありがとうございます。

    キャンセル

-2

import java.util.Scanner;

public class Chap2 {
public static void main(String []args){
Scanner stdIn = new Scanner(System.in);
int a;
int b;
int retry;

do{
//aの数値
System.out.print("数値を入力してください:");
a = stdIn.nextInt();
System.out.println("a:"+a);

//bの数値
System.out.print("数値を入力してください:");            
b= stdIn.nextInt();
System.out.println("b:"+b);            
System.out.println("a+b="+(a+b));

//retryの数値
System.out.print("続けるなら1、やめるなら0:");            
retry = stdIn.nextInt();
if(retry != 1 && retry != 0){
System.out.println("もう一度入力してください");
retry = stdIn.nextInt();
}
}while(retry == 1);

System.out.println("終了します");

}
}

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/01/21 17:13

    その方法だと複数回の異常値入力に耐えられません。
    またコードを記載する際は、マークダウン記法を用いて閲覧者に配慮するようにしてください。

    キャンセル

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

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