我存储我的数字:
ArrayList<Integer> nr=new ArrayList<Integer>();
nr.add(0);
nr.add(1);
nr.add(2);
nr.add(3);
nr.add(4);
nr.add(5);
nr.add(6);
nr.add(7);
nr.add(8);
nr.add(9);
Random r1 = new Random();
Random r2 = new Random();
Random r3 = new Random();
int rnd1 = r1.nextInt(nr.size());
nr.remove(rnd1);
int rnd2 = r2.nextInt(nr.size());
nr.remove(rnd2);
int rnd3 = r2.nextInt(nr.size());
nr.remove(rnd3);
我尝试删除生成的数字,但经过一些尝试后会不断重复
答案 0 :(得分:0)
这里的想法是你在0..9范围内生成一个随机数。然后删除一个元素,然后生成0..8范围内的另一个随机数。最后生成0..7范围内的第三个数字。
正确的方法是使用您生成的数字作为元素的索引。你用这个索引取一个元素:这是你的&#34;随机&#34;数。然后你删除这个元素,这样你就不能再拿它了(在我的例子中,我使用一个操作获取并删除元素:&#34;删除&#34;)。
ArrayList<Integer> nr = new ArrayList<Integer>();
nr.add(0);
nr.add(1);
nr.add(2);
nr.add(3);
nr.add(4);
nr.add(5);
nr.add(6);
nr.add(7);
nr.add(8);
nr.add(9);
Random r = new Random();
int rndPos1 = r.nextInt(nr.size());
int rnd1 = nr.remove(rndPos1);
int rndPos2 = r.nextInt(nr.size());
int rnd2 = nr.remove(rndPos2);
int rndPos3 = r.nextInt(nr.size());
int rnd3 = nr.remove(rndPos3);
System.out.println(rnd1 + ", " + rnd2 + ", " + rnd3);
答案 1 :(得分:0)
您可以shuffle
您的ArrayList并从中选择前三项:
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;
class Main {
public static void main(String[] args) {
ArrayList<Integer> nr =new ArrayList<Integer>();
nr.add(0);
nr.add(1);
nr.add(2);
nr.add(3);
nr.add(4);
nr.add(5);
nr.add(6);
nr.add(7);
nr.add(8);
nr.add(9);
System.out.println("The ArrayList looks like: " + Arrays.toString(nr.toArray()));
System.out.println("Three unique random numbers from it are:");
//shuffle the list
Collections.shuffle(nr);
for(int i=0; i<3; i++) {
System.out.println(nr.get(i));
nr.remove(i);
}
System.out.println("The ArrayList now looks like: " + Arrays.toString(nr.toArray()));
Collections.sort(nr);
System.out.println("Sorted: " + Arrays.toString(nr.toArray()));
}
}
使用示例:
The ArrayList looks like: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Three unique random numbers from it are:
7
8
5
The ArrayList now looks like: [6, 2, 3, 9, 4, 0, 1]
Sorted: [0, 1, 2, 3, 4, 6, 9]
试试here!
答案 2 :(得分:0)
您的代码存在多处问题:
1。您不需要每次都创建新的随机数。
2。因为您事先获得了所有选项,所以可能会遇到Array out of bounds exception。
在循环中获取随机数并检查,直到您有3个唯一数字 您的代码将如下所示:
aspect fit
这样做的另一个好方法是:
ArrayList<Integer> nr=new ArrayList<Integer>();
nr.add(0);
nr.add(1);
nr.add(2);
nr.add(3);
nr.add(4);
nr.add(5);
nr.add(6);
nr.add(7);
nr.add(8);
nr.add(9);
Random r1 = new Random();
for(nr.size != 7) {
nr.remove(r1.nextInt(nr.size()));
}
答案 3 :(得分:0)
Random
通过种子生成随机数。如果2 Random
个对象具有相同的种子,则它们生成的随机数将是相同的。默认情况下,此种子是当前系统时间。
在这里,您创建了三个Random
个对象:
Random r1 = new Random();
Random r2 = new Random();
Random r3 = new Random();
由于代码运行速度非常快,因此它们在相同的毫秒内创建,因此它们的种子是相同的。结果,它们生成相同的随机数。
修复代码的第一步是只创建一个Random
:
Random r = new Random();
下一步是修复从数组列表中选择随机数的方式。您应该在rnd1
,rnd2
,rnd3
int rnd1 = r.nextInt(nr.size());
int result1 = nr.get(rnd1);
nr.remove(rnd1);
int rnd2 = r.nextInt(nr.size());
int result2 = nr.get(rnd2);
nr.remove(rnd2);
int rnd3 = r.nextInt(nr.size());
int result3 = nr.get(rnd3);
nr.remove(rnd3);
result1-3
是您的非重复随机数!
我帮助您清理了代码:
int index = r.nextInt(nr.size());
int result1 = nr.get(rnd1);
nr.remove(index);
index = r.nextInt(nr.size());
int result2 = nr.get(rnd2);
nr.remove(index);
index = r.nextInt(nr.size());
int result3 = nr.get(rnd3);
nr.remove(index);