如何生成元素1-8各出现两次的4×4随机矩阵?
解决方案
要实现1-8每个数字恰好出现两次的4×4随机矩阵,核心思路是先构造符合次数要求的元素集合,再打乱顺序后填充矩阵,具体步骤如下:
- 构造初始元素集合:生成包含1到8每个数字各两次的列表,确保元素总数为16(4×4),满足矩阵大小要求。
- 随机打乱集合:利用
Collections.shuffle()方法对元素列表进行随机打乱,保证每次运行的排列状态不同。 - 填充二维矩阵:将打乱后的列表元素依次填入4×4矩阵中。
完整代码
import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; import java.util.Arrays; public class RandomMatrix { public static void main(String[] args) { // 构造包含1-8各两次的元素列表 List<Integer> elements = new ArrayList<>(); for (int i = 1; i <= 8; i++) { elements.add(i); elements.add(i); } // 随机打乱元素顺序 Collections.shuffle(elements, new Random()); // 填充4×4矩阵 int[][] mat = new int[4][4]; int index = 0; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { mat[i][j] = elements.get(index++); } } // 打印矩阵 for (int i = 0; i < 4; i++) { System.out.println(Arrays.toString(mat[i])); } } }
原代码问题说明
- 原代码使用
r.nextInt(8)生成的是0-7的随机数,不符合需求中的1-8范围。 - 直接随机填充每个位置无法控制数字出现次数,会导致部分数字出现次数过多或过少。
内容的提问来源于stack exchange,提问作者User7100727193652782638430
相关产品推荐
相关产品推荐

