随机填充二维数组

时间:2014-03-17 03:50:51

标签: java arrays

我正在使用Java并在5X5棋盘游戏(表示为String [] [])上工作,我正在寻找一种有效的方式来随机放置3" A"' s,3&# 34; B",s 3" C"' s,3" D""在板上。

我想过在while循环中使用嵌套for循环来遍历每个插槽,并随机地将字母分配给' slot'如果有一个很好的方法可以在一次通过中随机地将所有15个字母放在电路板上,那么我希望可以在电路板的一个通道中完成它。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

一种方法:创建一个ArrayList<Character>或String,输入15个字母,在ArrayList上调用java.util.Collections.shuffle(...),然后遍历此List,将其随机项放入数组中。

如,

  List<String> stringList = new ArrayList<String>();
  for (char c = 'A'; c <= 'E'; c++) {
     for (int i = 0; i < 3; i++) {
        stringList.add(String.valueOf(c));
     }
  }
  for (int i = 15; i < 25; i++) {
     stringList.add(null);
  }

  Collections.shuffle(stringList);
  String[][] gameBoard = new String[5][5];
  for (int i = 0; i < gameBoard.length; i++) {
     for (int j = 0; j < gameBoard[i].length; j++) {
        gameBoard[i][j] = stringList.get(i * gameBoard.length + j);
     }
  }

  // now test it
  for (int i = 0; i < gameBoard.length; i++) {
     for (int j = 0; j < gameBoard[i].length; j++) {
        System.out.printf("%-6s ", gameBoard[i][j]);
     }
     System.out.println();
  }

答案 1 :(得分:1)

您可以使用ArrayList来存储字母(以及空单元格,我使用点.以便您可以在输出中识别它),然后使用Collections.shuffle()ArrayList的元素放在“随机”位置。最后将每个字母分配给String[][]数组:

public static void main(String[] args)
{
    String[][] board = new String[5][5];
    List<String> letters = new ArrayList<>();

    // fill with letters
    for (int i = 0; i < 3; i++) {
        letters.add("A");
        letters.add("B");
        letters.add("C");
        letters.add("D");
        letters.add("E");
    }
    // fill with "empty"
    for (int i = 0; i < 10; i++) {
        letters.add(".");
    }

    Collections.shuffle(letters);

    for (int i = 0; i < board.length; i++) {
        for (int j = 0; j < board.length; j++) {
            board[i][j] = letters.get(i*board.length + j);
        }
    }

    for (int i = 0; i < board.length; i++) {
        for (int j = 0; j < board.length; j++) {
            System.out.print(board[i][j] + " ");
        }
        System.out.println();
    }
}

输出样本:

C B . . . 
A E . E A 
. A . D D 
C . . . D 
B C E . B 

注意:

操作i*board.length + j将在嵌套循环中生成后续数字0, 1, 2, 3, ... 24