[英]Randomly populating a 2d array
我正在使用Java并在5X5棋盘游戏(表示为String [] [])上工作,我正在寻找一种有效的方法来随机放置3“A”,3“B”,3“C”,3董事会上有“D”。
我想在while循环中使用嵌套for循环来遍历每个插槽,然后随机地将字母分配给板上的'slots',但是我希望可以在板的一次通过中执行它,如果有好的话在一次通过中随机将所有15个字母放在板上的方法。
有什么建议么?
一种方法:创建一个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();
}
您可以使用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
嵌套循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.