提问人:ckcp 提问时间:10/22/2023 更新时间:10/22/2023 访问量:48
将一个随机数添加到我的单向链表中,但它总是添加相同的随机数 [重复]
Adding a random number into my singly linked list, but it always adds the same randomized number [duplicate]
问:
我正在制作一个单向链表,我添加到列表中的数字必须是随机的。我似乎不能每次都得到一个随机数,而是在我需要它是不同的随机数时打印相同的随机数 10 次。
我知道这种情况正在发生,因为随机数只分配了一次,但是我如何让它每次都改变?
//Creating a random number between 1 and 107
static Random rnum = new Random();
static int randomNumber = rnum.nextInt((107- 1) + 1);
public static void main(String[] args) {
//Producer List
SinglyLinkedList pList = new SinglyLinkedList();
// Add random nodes to the list
for (int i = 0; i < 10; i++) {
pList.addNode(randomNumber);
}
代码的输出将是“71 71 71 71 71 (重复)”,我只想弄清楚如何每次都让它变成不同的数字!请帮忙!
答:
0赞
ControlAltDel
10/22/2023
#1
您应该为循环中的每次迭代生成一个新的随机数,而不是存储一个随机生成的数字。使用当前时间为 Random 对象设定种子也是一个好主意
static Random rnum = new Random(System.currentTimeMillis());
//static int randomNumber = rnum.nextInt((107- 1) + 1);
public static void main(String[] args) {
//Producer List
SinglyLinkedList pList = new SinglyLinkedList();
// Add random nodes to the list
for (int i = 0; i < 10; i++) {
pList.addNode((rNum.nextInt(106) + 1));
}
评论
0赞
ckcp
10/22/2023
做到了!谢谢!:)
0赞
ControlAltDel
10/22/2023
@ckcp 当您有机会时,请单击此答案旁边的箭头将问题标记为已解决
0赞
Elliott Frisch
10/22/2023
pList.addNode(ThreadLocalRandom.current().nextInt(1, 107));
1赞
Unmitigated
10/22/2023
传递可能比使用默认种子要糟糕得多。System.currentTimeMillis()
0赞
Reilas
10/22/2023
#2
"...我知道这种情况正在发生,因为随机数只分配了一次,但是我如何让它每次都改变?..."
使用方法。
static int randomNumber() {
return rnum.nextInt((107- 1) + 1);
}
或者,IntSupplier。
static IntSupplier randomNumber = (() -> rnum.nextInt((107- 1) + 1));
randomNumber.getAsInt()
或者使用流。
rnum.ints(10, 0, 108).forEach(pList::addNode);
评论
rnum.nextInt
for