将一个随机数添加到我的单向链表中,但它总是添加相同的随机数 [重复]

Adding a random number into my singly linked list, but it always adds the same randomized number [duplicate]

提问人:ckcp 提问时间:10/22/2023 更新时间:10/22/2023 访问量:48

问:

我正在制作一个单向链表,我添加到列表中的数字必须是随机的。我似乎不能每次都得到一个随机数,而是在我需要它是不同的随机数时打印相同的随机数 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 (重复)”,我只想弄清楚如何每次都让它变成不同的数字!请帮忙!

java 随机 链接列表 singlely-linked-list

评论

3赞 Old Dog Programmer 10/22/2023
您的代码仅调用了该方法一次。你有没有考虑过把它移到循环中?rnum.nextIntfor

答:

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);