【发布时间】:2011-09-30 08:06:32
【问题描述】:
我很难弄清楚如何生成一个从 1 到 8 范围内重复两次的随机数,并使其成为这样的矩阵:
5 8 2 5
3 6 4 1
7 6 2 3
4 7 8 1
顺便说一句,我打算在 android 上制作这个。
提前致谢。
【问题讨论】:
我很难弄清楚如何生成一个从 1 到 8 范围内重复两次的随机数,并使其成为这样的矩阵:
5 8 2 5
3 6 4 1
7 6 2 3
4 7 8 1
顺便说一句,我打算在 android 上制作这个。
提前致谢。
【问题讨论】:
我假设您想要一个包含所有数字 1-8 两次的随机 4x4 矩阵。
您可以轻松地将 16 个数字的列表转换为 4x4 矩阵。因此,您需要的是 1-8 个数字的随机列表。
List<Integer> list = new ArrayList<Integer>();
for (int i = 1; i <= 8; i++) {
list.add(i);
list.add(i);
}
// list = [1,1,2,2,3,3,..,8,8];
Collections.shuffle(list);
// gives something like [1,4,5,2,4,7,..8,1]
要将此列表转换为矩阵,只需逐行读取,一次读取 4 个数字。
【讨论】:
你真正想要的不是随机数。而是一组随机顺序的特定数字!
所以从需要的集合升序开始
int[] mySet = Array{1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8}
然后做类似的事情
for (x = 1;99,x++) {
from = (int)(Math.random()*8);
to = (int)(Math.random()*8);
if (from != to) {
int swap = mySet[to];
mySet[to] = mySet[from];
mySet[from] = swap;
}
}
【讨论】: