4

Java で Bingo Game 用に 2 つのメソッドを作成しました。1 つの方法は、ビンゴ ルール (1 ~ 75) に従ってビンゴ ボードに整数を入力する新しいボードを作成します。2 番目の方法では、1 ~ 75 の範囲の乱数を生成します。

public static int drawNum(){
    Random rand = new Random();
    int num = rand.nextInt(75)+1;
    return num;
}

public static void bingoCard(){


    int [][]card=new int [5][5];
    ArrayList<Integer> alreadyUsed = new ArrayList<Integer>();
    boolean valid = false;
    int tmp = 0;

    for(int i = 0; i <= 4; i++){
        for(int row = 0; row < card.length; row++){
            while(!valid){
                tmp = (int)(Math.random() * 15) + 1 + 15 * i;
                if(!alreadyUsed.contains(tmp)){
                    valid = true;
                    alreadyUsed.add(tmp);
                }
            }
            card[row][i] = tmp;
            valid = false;
        }
    }
    card[2][2] = 0;

    //create array to make title.  
    String title []={"B","I","N","G","O"};

    for(int i=0;i<title.length;i++){
        System.out.print(title[i]+ "\t");
    }

    System.out.println();

    for(int row=0;row<card.length;row++){
        for(int col=0;col<card[row].length;col++){
            System.out.print(card[row][col]+ "\t");
        }
        System.out.println();
    }
}

drawNum() メソッドが bingoCard() 配列内に格納されている値に対応しているかどうかを確認するにはどうすればよいですか? もしそうなら、整数が埋められた新しい配列を出力してください。ビンゴの条件が満たされた場合、あなたの勝ちです。

私はあなたにそれをやってほしいと思わせないように願っていますが、その部分のコーディングを開始する方法について混乱しています。ありがとうございました。

4

4 に答える 4

5

これは私のお勧めです - オブジェクト指向プログラミングをすぐに学びましょう

JDK で提供されているオブジェクトを使用しているようですが、独自のオブジェクトを作成する方法を学んでみませんか?

次のメソッド (-) とメンバー (+) を持つ 2 つのクラスを作成します (追記: これはコードを文書化するための正式な方法ではありません)。

BingoCard
    +list of numbers on card
    -reset() : gets new numbers for this card
    -test(BingoDrawer) : Tests to see if this card won on this drawing
    -toString() : returns a String representation of this card

BingoDrawer
    +list of numbers drawn
    -reset() : draws new numbers
    -hasNumber(int number) : tests if this number was drawn
    -toString() : returns a String representation of this drawing

もう1つの提案

  • 使用したものを追跡する代わりに、使用していないものを追跡すると、そのリストからランダムに選択できるため、作業がはるかに簡単になります. 薄い空気から (論理番号) を選択し、(問題を引き起こす) 希望している現在のアクションとは異なり、それは衝突ではありません。

私の推奨に従えば、次のようなコードを書くことができます

public static void main(String[] args) {
    BingoCard bc = new BingoCard();
    BingoDrawer bd = new BingoDrawer();
    while(thePlayerWantsToPlay()) { //function to be defined by you
        bc.reset();
        bd.reset();
        System.out.println(bc);
        System.out.println(bd);
        System.out.println(bc.test(bd));
    }
}

さらに一歩進んで、BingoGameクラスを作成し、mainそこで行ったことを実行して、オブジェクトのインスタンスを作成し、メソッドBingoGameを呼び出すことができます。start

于 2013-08-22T18:31:14.107 に答える
0

疑似コードとして書き出すだけで、その後にメソッドを埋め込むことができます。通常、これらの作業はトップダウン方式で行うと役立ちます。したがって、ビンゴの場合は次のようになります。

board = generateBoard();
while (!bingoFound(board)) {
    number = drawNumber();
    board = stampNumbers(board, number);
}

それが理にかなっている場合は、さらに一歩進んで各メソッドを定義できます。たとえば、次のbingoFoundようになります。

public boolean bingoFound(int[][] board) {
    boolean wasFound = bingoRowFound(board)
                    || bingoColFound(board)
                    || bingoDiagonalFound(board);
    return wasFound;
}

繰り返しますが、すべてを (ほとんど) 疑似コードで定義しました。これで問題がないように思えたら、もう 1 歩深く進むことができます。bingoRowFoundメソッドを定義しましょう。

public boolean bingoRowFound(int[][] board) {
    for (int row = 0; row < NUM_ROWS; row++) {
        boolean rowIsABingo = true;
        for (int col = 0; col < NUM_COLS; col++) {
            // We have to check that everything up until this point has
            // been marked off. I am using -1 to indicate that a spot has
            // been marked.
            rowIsABingo = rowIsABingo && board[row][col] == -1;
        }
        if (rowIsABingo) { return rowIsABingo; }
    }
    return false; // If we didn't find a bingo, return false.
}

一部のメソッド ( などdrawNumber) は、非常に簡単に実装できます。斜めのビンゴを探すのはもう少し難しいかもしれません。

于 2013-08-22T18:51:40.343 に答える