我正在使用Java并在5X5棋盘游戏(表示为String [] [])上工作,我正在寻找一种有效的方式来随机放置3" A"' s,3&# 34; B",s 3" C"' s,3" D""在板上。
我想过在while循环中使用嵌套for循环来遍历每个插槽,并随机地将字母分配给' slot'如果有一个很好的方法可以在一次通过中随机地将所有15个字母放在电路板上,那么我希望可以在电路板的一个通道中完成它。
有什么建议吗?
答案 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
。