gpt4 book ai didi

java - 如何用随机整数填充矩阵而不重复它们?

转载 作者:行者123 更新时间:2023-12-02 09:57:54 26 4
gpt4 key购买 nike

编程新手。我正在尝试编写宾果游戏,我遇到了两个艰巨的挑战(对我来说),我不知道如何应对。 - 如何用非重复整数填充二维数组。 - 如何在宾果卡(矩阵)中间留下空白区域。事情应该是这样的。

这是我用来填充矩阵值的函数

public static void fillBoard(int [][] pBoard){

Random rand = new Random();
for (int[] pBoard1 : pBoard) {
for (int j = 0; j < pBoard1.length; j++) {
pBoard1[j] = rand.nextInt(100);
}
}


}

这就是我初始化矩阵的方式

public static int [] [] defineBoard(){

int [] [] board = {{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},
{1,2,3,4,5},};

return board;

}

我这样打印

public static void printBoard(int [][] pBoard){

for(int [] rows : pBoard)
{
for(int column : rows)
{
System.out.print("| " + column + " ");
}
System.out.println("|");
}
}

这是我的输出示例

| 34 | 43 | 6 | 22 | 61 |
| 18 | 95 | 43 | 75 | 53 |
| 40 | 10 | 34 | 38 | 66 |
| 43 | 74 | 77 | 77 | 34 |
| 95 | 69 | 48 | 29 | 38 |

我的问题再次是:我不知道如何在中间(3d 行,3d 列)留下空白,并且我无法使值不重复。谢谢!

最佳答案

Java 平台中有一些类可以使此任务的完成变得更简单。正如 GBloggett 所指出的,HashSet Java 集合框架中的类被定义为集合不能包含重复值。尝试将现有值添加到 HashSet结果集合未被修改。利用此合约,您可以通过以下方式生成 25 个唯一的随机数:

Set<Integer> grid = new HashSet<Integer>();
Random rand = new Random();

while (grid.size() < 25) {
Integer val = rand.nextInt(100);
grid.add(val);
}

请注意,Java 集合框架类是通用类型。声明new HashSet<Integer>()只是告诉编译器您的 Set实例可能仅包含 Integer实例。

打印网格不需要矩阵。可以直接从 HashSet 获取线性数组实例,然后利用一点逻辑:即网格行等于 (array_index / 5)并且网格列等于 (array_index % 5) 。对于您的用例来说,网格的“中间”始终是 (row, column) = (2, 2),因此您可以利用它来制作硬编码解决方案,以在中间获得空白空间:

Integer[] gridInts = grid.toArray(new Integer[0]);
StringBuilder output = new StringBuilder();

for (int index = 0; index < gridInts.length; index++) {
int row = index / 5;
int col = index % 5;

String cell = (row == 2 && col == 2) ? "--" : gridInts[index].toString();
output.append(" | ").append(cell);
if (col == 4) output.append(" |" + "\\n"); // causes a new line to start
// after the last column in the grid
}

String result = output.toString(); // gets String from StringBuilder
System.out.println(result); // sends grid to standard output

这些代码片段应该可以满足您的需求。请注意,三元运算符用于确定是否在输出中生成空白点。这只是一个内联 if-then-else 表达式。另请注意 StringBuilder实例用于在构造时保存输出。这并不是绝对必要的,可以使用字符串连接运算符来代替(并且它可能更具可读性)

关于java - 如何用随机整数填充矩阵而不重复它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55857464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com