我只是想知道如何在java中生成两个彼此不同的数字。
我想随机选择1-3之间的两个数字,但是,我不希望它们是相同的数字?
我应该怎么做?我试图使用一个循环,我不断得到相同的数字这就是我做的事情
Random random = new Random();
for(int i =0; i<3; i++){
int randomInteger = random.nextInt();
System.out.println("Random Integer in Java: " + randomInteger);
}
答案 0 :(得分:1)
解决方案取决于您将使用的比例。您可以生成数字,直到获得所需的结果,这在您的情况下是更好的方式,或者如果事先知道内容,您可以“选择”数字集的随机元素。
生成,直到您获得结果,并使用while
拒绝:
Random random = new Random();
int first = random.nextInt(3)+1;
int second;
while(second == null || first == second){
second = random.nextInt(3)+1;
}
如果您需要更大的集合中的两个以上的数字,您可以考虑使用数组或列表作为结果。检查结果是否全部准备就好了。
另一种方法是从混乱的集合中选择数字。
List<Integer> numberSet = new ArrayList<>();
for(int i = 1; i<=3; i++){
numberSet.add(i);
}
Collections.shuffle(numberSet);
for(int j = 0; j<2; j++)
{
System.out.println(numberSet.get(j));
}
在某些情况下,您可以通过这种方式保存几个周期。
答案 1 :(得分:1)
以下解决方案使用“虚拟”删除第一个数字,而不使用列表或集合。它还针对给定范围进行了优化,并通过单次调用Random.nextInt()来获取两个值。
Random rand = new Random();
for (int k=0; k<10; k++) {
int v12=rand.nextInt(6);
int v1=v12>>1;
int v2=v12 & 0x1;
if (v2>=v1) v2++;
v1++; v2++; // from 0..2 to 1..3
System.out.println("" + v1+" "+v2);
}
答案 2 :(得分:0)
代码是随机选取整数,但它同时打印它们而不检查任何重复。此外,它没有指定它必须介于1-3之间
所以这是如何做到的。
当然,您首先需要import java.util.Random
。
Random rand = new Random();
int value = rand.nextInt(3) +1; // this will choose a number between 1-3 not 0-2
int secondvalue = rand.nextInt(3) +1; // same thing but we need 2 of them since we want 2 random numbers and not only 1 !
while(value == secondvalue) { //to see if the first random number = the second
secondvalue = rand.nextInt(3) +1; // if so, regenerate the second randomly
}
// and finally print them
System.out.println(" Value is " + value);
System.out.println(" Value is " + second value);
有很多方法可以做到这一点,但我相信这是处理它的最简单方法。
答案 3 :(得分:0)
Random random = new Random();
Set<Integer> twoSet = new HashSet<>();
while (twoSet.size() < 2) {
twoSet.add(random.nextInt(someNumber);
}
请注意,如果你的范围太小,这将无休止地循环。
此外,您可能需要查看此内容:http://en.wikipedia.org/wiki/Reservoir_sampling
答案 4 :(得分:0)
由于只有6种可能的答案组合,因此可以将它们放在一个表中,然后从该表中随机检索:
static int[] v1s=new int[]{1,1,2,2,3,3};
static int[] v2s=new int[]{2,3,1,3,1,2};
Random rand = new Random();
for (int k=0; k<10; k++) {
int v12=rand.nextInt(6);
int v1=v1s[v12];
int v2=v2s[v12];
System.out.println("" + v1+" "+v2);
}