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

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

ただいまの
回答率

87.49%

JAVAのif文について

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 560

score 6

前提・実現したいこと

JAVAはじめたばかりのド素人です。
下記のコードは1回のみで終わってしましますが、さらに条件を増やしたいです。

例えば
1と入力された場合「あなたの性別は男性ですね。」と表示された後に、
「昨日はランニングをしましたか?」「1:しました。、2:していません。」
2と入力された場合「あなたは女性ですね。」と表示された後に、
「昨日はショッピングに行きましたか?」「1:行きました。、2:行きませんでした。」

のように質問を2、3回繰り返し最後に「以上で質問は終了です。」
となるようなJAVAプログラムの書き方を教えて下さい。

該当のコード

import java.io.*;

class Sample1
{
    public static void main(String[] args) throws IOException
    {
        System.out.println("あなたの性別はなんですか?");
        System.out.println("1:男性、2:女性");

        BufferedReader br =
         new BufferedReader(new InputStreamReader(System.in));

        String str1= br.readLine();
        int seibetu = Integer.parseInt(str1);

        if(seibetu == 1){
            System.out.println("あなたの性別は男性ですね。");
        } else if(seibetu == 2) {
            System.out.println("あなたの性別は女性ですね。");
        } else {
            System.out.println("1か2を入力してください。");
        }
    }
}

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 4

checkベストアンサー

+1

以下のような形でif分の中にif分を入れる構造を作れば可能だと思います。

 public static void main(String[] args) throws IOException {
        System.out.println("あなたの性別はなんですか?");
        System.out.println("1:男性、2:女性");

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str1 = br.readLine();
        int seibetu = Integer.parseInt(str1);

        if (seibetu == 1) {
            System.out.println("あなたの性別は男性ですね。");
            System.out.println("昨日はランニングをしましたか?");
            System.out.println("1:しました。2:していません。");
            String str2 = br.readLine();
            int didRun = Integer.parseInt(str2);
            if (didRun == 1) {
                System.out.println("ランニングをしたんですね");
            } else if (didRun == 2) {
                System.out.println("ランニングをしていないんですね");
            } else {
                System.out.println("1か2を入力してください。");
            }
        } else if (seibetu == 2) {
            System.out.println("あなたの性別は女性ですね。");

            System.out.println("昨日はショッピングに行きましたか?");
            System.out.println("1:行きました。2:行きませんでした。");
            String str2 = br.readLine();
            int didGoShopping = Integer.parseInt(str2);
            if (didGoShopping == 1) {
                System.out.println("ショッピングに行ったんですね");
            } else if (didGoShopping == 2) {
                System.out.println("ショッピングに行ってないんですね");
            } else {
                System.out.println("1か2を入力してください。");
            }
        } else {
            System.out.println("1か2を入力してください。");
        }
    }

しかし if文の中にいくつもifが続くとコードが非常に見にくいため性別を管理する変数で情報を保持し以下のような記載をするのも良いと思います

 public static void main(String[] args) throws IOException {
        System.out.println("あなたの性別はなんですか?");
        System.out.println("1:男性、2:女性");

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str1 = br.readLine();
        int seibetu = Integer.parseInt(str1);
        String sex = "";

        if (seibetu == 1) {
            System.out.println("あなたの性別は男性ですね。");
            sex = "man";
        } else if (seibetu == 2) {
            System.out.println("あなたの性別は女性ですね。");
            sex = "woman";
        } else {
            System.out.println("1か2を入力してください。");
        }

        if (sex.equals("man")) {
            System.out.println("昨日はランニングをしましたか?");
            System.out.println("1:しました。2:していません。");
            String str2 = br.readLine();
            int didRun = Integer.parseInt(str2);
            if (didRun == 1) {
                System.out.println("ランニングをしたんですね");
            } else if (didRun == 2) {
                System.out.println("ランニングをしていないんですね");
            } else {
                System.out.println("1か2を入力してください。");
            }
        } else {
            System.out.println("昨日はショッピングに行きましたか?");
            System.out.println("1:行きました。2:行きませんでした。");
            String str2 = br.readLine();
            int didGoShopping = Integer.parseInt(str2);
            if (didGoShopping == 1) {
                System.out.println("ショッピングに行ったんですね");
            } else if (didGoShopping == 2) {
                System.out.println("ショッピングに行ってないんですね");
            } else {
                System.out.println("1か2を入力してください。");
            }
        }
    }

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/06/23 23:01

    ありがとうございます!!!
    納得しました。頑張ります。

    キャンセル

+1

「昨日はランニングをしましたか?」「1:しました。、2:していません。」

という処理をする関数を作りましょう。
また、

「昨日はショッピングに行きましたか?」「1:行きました。、2:行きませんでした。」 

という関数も作りましょう。

そうしておけば、
男性のとき、女性のとき、にそれぞれの関数を呼べばすみます

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/06/23 22:54

    早速のご回答ありがとうございます。
    昨日本を買って始めたばかりで、まだ関数?の使い方がわかりません。。。
    そのソースコードの例を教えていただけませんでしょうか?
    素人で申し訳ありません。

    キャンセル

+1

if 文は、それぞれの分岐処理の内部に別の if 文を書けるので、

if(seibetu == 1){
    System.out.println("あなたの性別は男性ですね。");
    // 2つめの質問の提示
    // 2つめの選択肢の提示
    // 入力とパース処理(たとえば、変数runに代入)
    if (run == 1) {
        // 1と答えた場合の処理
    } else if (run == 2) {
        // 2と答えた場合の処理
    } else {
        System.out.println("1か2を入力してください。");
    }
} else if (seibetu == 2) {  
    // 以下略
}


みたいにすれば、いくらでも質問を重ねていけます。知りたいのはそういうことですよね?

ただ、これではどんどん階層が深くなってプログラムが読みにくくなってしまうので、if 文の動作を理解できたら、もっと読みやすく書けないか検討しましょう。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

数値の入力には Scanner を使うと便利ですよ。
メッセージのデータを配列で持つとこうなります。

import java.util.Scanner;

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

        String msg[][] = {
            {
                "あなたの性別は男性ですね。\n"
                + "昨日はランニングをしましたか?\n"
                + "1:しました。2:していません。",
                "ランニングをしたんですね",
                "ランニングをしていないんですね",
                "1か2を入力してください。"
            }, {
                "あなたの性別は女性ですね。\n"
                + "昨日はショッピングに行きましたか?\n"
                + "1:行きました。2:行きませんでした。",
                "ショッピングに行ったんですね",
                "ショッピングに行ってないんですね",
                "1か2を入力してください。"
            }
        };
        System.out.println("あなたの性別はなんですか?\n1:男性、2:女性");
        int sex = sc.nextInt();
        if (sex != 1 && sex != 2)
            System.out.println("1か2を入力してください。");
        else {
            System.out.println(msg[--sex][0]);
            int n = sc.nextInt();
            if (n == 1 || n == 2)
                System.out.println(msg[sex][n]);
            else
                System.out.println(msg[sex][3]);
        }
    }
}


追記
ちょっと修正。

        if (sex != 1 && sex != 2)
            System.out.println(msg[0][3]);
        else {
            System.out.println(msg[--sex][0]);
            int n = sc.nextInt();
            if (n != 1 && n != 2) n = 3;
            System.out.println(msg[sex][n]);
        }

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/06/23 23:55

    驚きです!!!
    まだ始めたばかりで難しいですが、、、
    こんなに短く書けるんですね!
    ありがとうございます。頑張ります。

    キャンセル

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

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

関連した質問

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