0

Cell オブジェクトの配列でボードをセットアップするメソッドを実装しようとしました。メソッドは、新しい文字列「C10」を「---」文字列の上にランダムに配置します。私のクラスとメインは以下です

public class Cell {
    public int addSpaces;

    public Cell() {
        addSpaces = 0;
    }

    public Cell(int x) {
        addSpaces = x;
    }

    public String toString() {
        String print;
        if (addSpaces == -10)
            print = "C10";
        else
            print = "---";
        return print;
    }
}

import java.util.Random;
public class ChutesAndLadders {
    Cell[] board = new Cell[100]; // Set array of Cell object
    Random ran = new Random();
    Cell s = new Cell();
    public int Chut, Ladd;

    public ChutesAndLadders() {
    }

    public ChutesAndLadders(int numChutes, int numLadders) {
        Chut = numChutes;
        Ladd = numLadders;
    }

    public void setBoard() {
        for (int i = 0; i < board.length; i++)
            board[i] = new Cell(); // board now has 100 Cell with toString "---"
        for (int k = 1; k <= Chut; k++) {
            int RanNum = ran.nextInt(board.length); // Randomly replace the
                                                    // toString
            if (board[RanNum] == board[k])
                this.board[RanNum] = new Cell(-10);
            else
                k--;
        }
    }

    public void printBoard() { // method to print out board
        int count = 0;
        for (int i = 0; i < board.length; i++) {
            count++;
            System.out.print("|" + board[i]);
            if (count == 10) {
                System.out.print("|");
                System.out.println();
                count = 0;
            }
        }
    }

    public static void main(String[] args) {
        ChutesAndLadders cl = new ChutesAndLadders(10, 10);
        cl.setBoard();
        cl.printBoard();
    }
}

ボード全体に C10 をランダムに配置する代わりに、この出力を得ました。

|---|C10|C10|C10|C10|C10|C10|C10|C10|C10|
|C10|---|---|---|---|---|---|---|---|---|
|---|---|---|---|---|---|---|---|---|---|
|---|---|---|---|---|---|---|---|---|---|
|---|---|---|---|---|---|---|---|---|---|
|---|---|---|---|---|---|---|---|---|---|
|---|---|---|---|---|---|---|---|---|---|
|---|---|---|---|---|---|---|---|---|---|
|---|---|---|---|---|---|---|---|---|---|
|---|---|---|---|---|---|---|---|---|---|

誰かが私が間違ったことを教えてもらえますか? ありがとうございました。

4

3 に答える 3

1

これに対するあなたの意図があなたのforループにあったかどうかはわかりません:

if (board[RanNum] == board[k])

ただし、forループは、kごとに、kを生成するまで乱数を生成し、そのセルを設定します。したがって、k == 1 の場合は常にセル 1、k == 2 の場合はセル 2、k == 3 の場合はセル 3 などを設定します。

私はあなたがもっと好きなことをしたいと思っています:

for (int k = 1; k <= Chut; k++) {
    int RanNum = ran.nextInt(board.length);
    if (board[RanNum].addSpaces == 0) // uninitialized
        this.board[RanNum] = new Cell(-10);
    else
        k--;
}

編集:

おそらくコメントと他の回答からわかるように、上記のコードは特に読みにくいです。このようなものが良いはずです:

int chutCount = 0;
while (chutCount < Chut)
{
    int randomNum = ran.nextInt(board.length);
    if (board[randomNum].addSpaces == 0) // uninitialized
    {
        board[randomNum] = new Cell(-10);
        chutCount++;
    }
}
于 2013-03-15T22:55:41.463 に答える
0

私はあなたが意味したと思います!=

for (int k = 1; k <= Chut; k++) {
   int ranNum = (int)(Math.random()*board.length);
   if (board[ranNum] != board[k])
      this.board[ranNum] = new Cell(-10);
   else
      k--;
}
于 2013-03-15T22:58:27.793 に答える