![](/img/trans.png)
[英]How to generate random numbers and distribute them randomly to some buttons?
[英]How should I randomly generate two numbers at the same time without them being duplicated?
我只是想知道如何在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);
}
解決方案取決於您將使用的規模。 您可以生成數字,直到獲得所需的結果,這在您的情況下是更好的方法,或者如果事先知道內容,您可以“選擇”數字集的隨機元素。
生成直到獲得結果, 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));
}
在某些情況下,您可以通過這種方式節省幾個周期。
以下解決方案使用“虛擬”刪除第一個數字,而不使用列表或集合。 它還針對給定范圍進行了優化,並通過單次調用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);
}
那么代碼是隨機選取整數,但它同時打印它們而不檢查任何重復。 另外,它沒有指定它必須在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);
有很多方法可以做到這一點,但我相信這是處理它的最簡單方法。
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
由於只有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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.