我遇到的问题是在Java中生成1到6之间的6个随机数。所有数字都必须是唯一的。当我输入kolon值5时,数组应该是这样的:
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
我不希望程序生成相同的两个数字。这有什么不对?
相关代码:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Please enter row quantity: ");
int kolon = input.nextInt();
Integer[][] dizi_asil = new Integer[kolon][6];
for (int i = 0; i < kolon; i++) {
Integer[] dizi = new Integer[6];
for (int j = 0; j < 6; j++) {
dizi[j] = (int) ((Math.random() * 6) + 1);
for (int u = 0; u < 1; u++) {
for (int k = 0; k < j; k++) {
while (dizi[k] == dizi[j]) {
dizi[j] = (int) ((Math.random()* 6) + 1);
u++;
}
}
}
dizi_asil[i][j] = dizi[j];
}
Arrays.sort(dizi_asil[i]);
}
for (int i = 0; i < dizi_asil.length; i++) {
for (int k = 0; k < dizi_asil[i].length; k++) {
System.out.print(dizi_asil[i][k] + "\t");
}
System.out.println();
}
答案 0 :(得分:7)
创建一个包含1到6的列表。然后使用Collection.shuffle对其进行随机播放。然后您将获得随机唯一编号
答案 1 :(得分:6)
这是一种简单的方法:
List<Integer> list = Arrays.asList(1,2,3,4,5,6);
Collections.shuffle(list);
// you can convert it to an array if you need to.
答案 2 :(得分:5)
一个非常简单的修复方法 - 将u++;
替换为u--;
。 ++
会使循环停止,--
会使循环停止。
虽然我建议更像下面的内容。我希望这很容易理解。
Integer[] dizi = new Integer[6];
for (int j = 0; j < 6; j++)
{
boolean isValid;
do
{
dizi[j] = (int) ((Math.random() * 6) + 1);
isValid = true;
for (int k = 0; isValid && k < j; k++)
if (dizi[k] == dizi[j])
isValid = false;
}
while (!isValid);
dizi_asil[i][j] = dizi[j];
}
我还建议the Random class使用nextInt(int)
方法,该方法优于(int) ((Math.random() * 6) + 1)
。
但改组可能是一种更快捷的方式。要么像其他答案一样使用API,要么查看Fisher-Yates / Knuth shuffle以获得简单的随机播放算法。
答案 3 :(得分:3)
List<Integer> list = new ArrayList<Integer>();
for(int i = 1; i<7 ; i++)
list.add(i);
或者你可以这样做:
List<Integer> list = Arrays.asList(1,2,3,4,5,6)
Collections.shuffle(list);
迭代列表并每次获得唯一值。
答案 4 :(得分:1)
更短的方法是使用已经提到的shuffle。
public static void main(String... ignored) {
Scanner input = new Scanner(System.in);
System.out.println("Please enter row quantity: ");
List<Integer> rolls = Arrays.asList(1, 2, 3, 4, 5, 6);
for (int i = 0, rows = input.nextInt(); i < rows; i++) {
Collections.shuffle(rolls);
System.out.println(rolls);
}
}
如果你运行它就会得到像
这样的东西Please enter row quantity:
5
[5, 6, 3, 2, 4, 1]
[5, 4, 3, 6, 2, 1]
[6, 4, 2, 3, 5, 1]
[3, 1, 6, 2, 5, 4]
[4, 1, 6, 3, 5, 2]
答案 5 :(得分:0)
进口:
import acm.util.RandomGenerator;
private RandomGenerator rgen = RandomGenerator.getInstance();
实际采摘:
randnum = rgen.nextInt(1, 6);
这会选择0到5之间的随机数。您可以执行1到6之间的操作:
randnum = rgen.nextInt(2, 7);
或者:
randnum = rgen.nextInt(1, 6);
randnum++;