0

同じプログラムで実行される 12 x 12 のテーブルを作成しましたが、「public static void main」を別の「testfile」に配置できるように OO にしたいのですが、それでも適切に実行されます。オブジェクト指向のアプローチでいくつかの問題があり、本当に助けが必要です...これは私のコードがどのように見えるかです:

import java.util.Scanner;
import java.util.Arrays;
import java.util.Random;

public class PlayingArea {
    public static void main(String[] args) {
        Random r = new Random();
        Scanner input = new Scanner(System.in);
        System.out.println("How many regions would you like (2- 4)");
        int region = input.nextInt();
        String letters = "";
        while(letters.length() < 2) {
            if (region == 4) {
                letters= "EFGH";
            }
            if (region == 3) {
                letters= "EFG";
            } else if (region == 2) {
                letters= "EF";
            } else if (region < 2) {
                System.out.println("You inputed a wrong value, try again...");
            }
        }
        int N = letters.length();
        char [][] letter = new char[12][12];

        for (int j = 0; j < letter.length; j++) {

            for(int i=0; i < letter.length; i++) {
                letter[i][j] = letters.charAt(r.nextInt(N)) ;
            }
        }

        for (char[] letterRow : letter)
            System.out.println(Arrays.toString(letterRow));
    }
}
4

1 に答える 1

2

あなたがJavaに比較的慣れていない場合は、かなりうまくやっています。2 ~ 4 以外の数値を入力すると、プログラムに無限ループが発生することに注意してください (以下で修正)。

まず、クラスPlayingAreaには状態を表すメンバー変数が必要です。

1 つ目はString letters(EF または EFG または EFGH) で、以下のコードでコンストラクターを介して初期化されます。

2 つ目はchar[][] grid(letterコード内で名前が変更された) メソッドで値が割り当てられ、populate()文字をグリッドに配置するものです。

もう 1 つの方法は、gridAsString()まさにそれを行います。

必要に応じて、簡単に別のpublic static void mainクラスに移動できるようになりました。

楽しむ。

public class PlayingArea {
    private String letters;
    private char[][] grid;

    public PlayingArea(String letters) {
        this.letters = letters;
    }

    public void populate() {
        int n = letters.length();
        grid = new char[12][12];

        Random r = new Random();
        for (int j = 0; j < grid.length; j++) {
            for (int i = 0; i < grid.length; i++) {
                grid[i][j] = letters.charAt(r.nextInt(n));
            }
        }

    }

    public String gridAsString() {
        StringBuilder sb = new StringBuilder();
        for (char[] letterRow : grid) {
            sb.append(Arrays.toString(letterRow)).append('\n');
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("How many regions would you like (2- 4)");
        String letters = "";
        while (letters.length() < 2) {
            int region = input.nextInt();
            if (region == 4) {
                letters = "EFGH";
            } else if (region == 3) {
                letters = "EFG";
            } else if (region == 2) {
                letters = "EF";
            } else {
                System.out.println("You inputed a wrong value, try again...");
            }
        }
        PlayingArea playingArea = new PlayingArea(letters);
        playingArea.populate();
        System.out.println(playingArea.gridAsString());
    }
}
于 2013-11-14T19:05:46.717 に答える