ここから本文です

class Main {

アバター

ID非公開さん

2019/5/814:52:10

class Main {

public static void main(String[] args) {
String[] cmd = {"グー", "チョキ", "パー"};
java.util.Random rnd = new java.util.Random( );
int ran1 = rnd.nextInt(3);
int ran2 = rnd.nextInt(3);

System.out.println("最初はグー");
System.out.println("じゃんけんぽん");
System.out.println("A君は" + cmd[ran1] + "。");
System.out.println("B君は" + cmd[ran2] + "。");
switch((ran1 - ran2 + 3) % 3) {
case 0: System.out.println("あいこ");break;
case 1: System.out.println("B君の勝ち");break;
case 2: System.out.println("A君の勝ち");break;
}
}
}
このプログラムを、クラスやメソッドを使った形にリファクタリングしたらどんな感じになりますか?

閲覧数:
48
回答数:
2

違反報告

ベストアンサーに選ばれた回答

blu********さん

編集あり2019/5/815:22:47

>このプログラムを、クラスやメソッドを使った形にリファクタリングしたらどんな感じになりますか?

大半の場合、むしろ面倒臭くなる。
理由はプログラムの規模が小さすぎるから。

メソッドに書く処理の合計行が1万行あるなら、クラスやメソッドを分けた方がいい。
それは、Mainクラスのmainメソッドに1万行は見づらいから。

オブジェクト指向は大規模なコードをクラス単位で分けられるのが魅力の1つなので、小規模では魅力はほぼない。

なので、数十行で終わる程度の処理ならクラス分けをするとかえって複雑になる。

サンプルコード
https://paiza.io/projects/WVPdHIVkK4Y4ZdIisTHTig

  • アバター

    質問者

    ID非公開さん

    2019/5/822:17:07

    サンプルコードまでありがとうございます。確かに面倒臭そうです。大変勉強になりました。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

ikt********さん

2019/5/914:06:27

blu********さん ご意見に基本的に同意ですけど、
お遊び・ネタ としてやってみました。

import java.util.Random;

class Main {
    public static void main(String[] args) {
        var a = new Player("A君");
        var b = new Player("B君");

        System.out.println("最初はグー\nじゃんけんぽん");
        var result = a.hand().game(b.hand());
        System.out.println(a.name + "の" + result);
    }
}

enum Hand {
    グー, チョキ, パー;

    Result game(Hand other) {
        return Result.values()[
            (this.ordinal() - other.ordinal() + 3) % 3
        ];
    }
}

enum Result {あいこ, 負け, 勝ち}

class Player {
    final String name;
    Player(String name) {
        this.name = name;
    }

    Hand hand() {
        var h = Hand.values()[rnd_.nextInt(3)];
        System.out.println(name + "は" + h);
        return h;
    }
    private static final Random rnd_ = new Random();
}


実行結果:
C:\tmp>javac -version
javac 12.0.1

C:\tmp>javac -encoding utf-8 Foo.java

C:\tmp>java Main
最初はグー
じゃんけんぽん
A君はグー
B君はチョキ
A君の勝ち

C:\tmp>java Main
最初はグー
じゃんけんぽん
A君はグー
B君はグー
A君のあいこ

C:\tmp>java Main
最初はグー
じゃんけんぽん
A君はグー
B君はパー
A君の負け

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる