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

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

ただいまの
回答率

90.75%

  • Java

    13158questions

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

大量のifを簡潔にまとめる方法はありますか?

解決済

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 231

Kohaku

score 2

実現したいこと

変数xが〇〇のときは『ホニャララを実行』
・・  △△のときは『ホニャホニャを実行』
という処理を何個も行いたいのですができるだけ簡潔に書く方法はありますか?
if文で書くとすると下記のような感じになります。

ソースコード

int x =1;

if(x == 1){
 System.out.println("変数x:"+ x);
}
if(x == 2){
 System.out.println("変数x:"+ x);
}
if(x == 3){
 System.out.println("変数x:"+ x);
}

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

+2

分岐の考え方

多様性を使う。

オブジェクト指向の醍醐味のひとつ。ただし、簡素な分岐には不向き。

配列を使う。

添え字に応じて変数を切り替える場合に有効。連想コンテナも面白い。以下使用例、動作未確認

String x[] == {"case1", "case2", "case3" //以下略

//中略、添え字indexをセット
System.out.println(x[index]);

switch文を使う。

単純な分岐であれば、if文よりも読みやすい。ただし、関係演算子< とかには使用できない。

if文を使う

確実な方法ではある。が、機能が多い分、バグの元にもなりやすいという現状があり、別案があるならば回避したい選択肢である。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/01/01 15:46

    詳しく回答ありがとうございます

    キャンセル

+1

配列方式の応用例です。
Java8以上になりますが、ラムダ式を配列で管理する方法です。
それぞれ長い処理なら、役に立つかと、、、。

import java.util.function.Consumer;

public class Hero {
    public static final int MAXIMUM_ACTION = 4;

    public static final int COMMAND_GUARD = 0;
    public static final int COMMAND_FIGHT = 1;
    public static final int COMMAND_TALK  = 2;
    public static final int COMMAND_CAST  = 3;

    private String name;
    private Consumer<String>[] actions = new Consumer[MAXIMUM_ACTION];

    public Hero(String name) {

        this.name = name;

        actions[COMMAND_GUARD] = value -> guard(value);
        actions[COMMAND_FIGHT] = value -> fight(value);
        actions[COMMAND_TALK]  = value -> talk(value);
        actions[COMMAND_CAST]  = value -> cast(value);
    }

    public void decide(int command, String monster) {
        actions[command].accept(monster);
    }

    private void guard(String monster) {
        System.out.println(name + "は"+ monster + "の攻撃から身を守ろうとした。");
    }

    private void fight(String monster) {
        System.out.println(name + "は"+ monster + "を攻撃した。");
    }

    private void talk(String monster) {
        System.out.println(name + "は"+ monster + "に話しかけた。");
    }

    private void cast(String monster) {
        System.out.println(name + "は"+ monster + "に魔法を使った。");
    }

    public static void main(String[] args) {
        Hero hero = new Hero("たろう");
        String monster = "ゴーレム";
        hero.decide(COMMAND_FIGHT, monster);
        hero.decide(COMMAND_CAST, monster);
    }
}

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

checkベストアンサー

0

まさにそのためのものがあります。

switch(x) {
case 1:
    ...
    break;
case 2:
    ...
    break;
case 3:
    ... 
    break;
default:   // elseに相当
    ...
}

ネット上の情報も豊富です。Google - Java switch


ただ、質問のコードの場合そもそも条件分岐が不要なのでは?とも思います。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/01/01 15:44

    switch文の存在完全に忘れてました^^;
    今回のprintlnは例なんでもっと違う処理突っ込む予定です。
    ありがとうございます。

    キャンセル

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

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

関連した質問

  • 解決済

    100になる直前の加算結果出力

    javaで開始値と終了値を入力してその間の偶数を加算していき、合計が100を超えたら「数値が100を超えたため、処理を中止します。」とメッセージを出し、かつ合計が100になる前の加

  • 解決済

    javaでのgetInt

    javaでhsqldbに接続しています。 statement = getConnection().createStatement(); ResultSet resultSet

  • 解決済

    Javaのオーバーライドについての質問です。

    学校の課題をしているのですが、以下のような実行結果になりません。まだ今日オーバーライドを習ったばっかりでよくわからないんですがご指摘お願いします。初心者で説明不足かもしれませんがよ

  • 解決済

    javaの配列に文字を格納して処理する方法

     疑問、質問 javaについての質問です。 キーボードから文字を一字ずつ入力し配列に格納する。 その後配列に格納されていた文字によってそれぞれ順番に処理していくというプログラ

  • 解決済

    Javaの例外処理について初歩的な質問

    お世話になっております。 Javaの例外処理について初歩的な確認をさせてください。 以下のような処理があったとき。 try { 処理1 処理2 ca

  • 解決済

    2次元配列のコピーと出力

    前提・実現したいこと 要素数が3つで4つの値が入る配列yを作成し、それをコピーした配列xを作成し, 任意の数箇所に別の値を代入しyとxの要素を出力せよ. コンソール↓ 4 

  • 解決済

    ArrayListについて

    ArrayList<String> List = new ArrayList<String>(); try{ FileReader fr = new FileReader(file

  • 解決済

    java フィボナッチ数のプログラム 0を入力して終わるようにしたい

    該当のソースコード import java.util.Scanner; public class Kadai19{ public static void main(String

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

  • Java

    13158questions

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