向单链表添加随机数时重复生成同一数值的问题求助
问题原因
你定义的randomNumber是静态成员变量,它只会在类加载时执行一次赋值操作,也就是只生成一次随机数。循环里反复添加的都是这个已经固定下来的值,自然全是重复的。
解决办法
把生成随机数的逻辑移到循环内部,让每次循环都调用Random.nextInt()生成新的随机数。另外,Random实例可以保留为静态(避免每次循环创建新实例,更高效),但不需要提前把随机数存到变量里。
修正后的代码:
// 创建Random实例(静态,全局复用) static Random rnum = new Random(); public static void main(String[] args) { // 生产者链表 SinglyLinkedList pList = new SinglyLinkedList(); // 循环添加随机节点 for (int i = 0; i < 10; i++) { // 每次循环生成新的随机数(范围1-107) int randomNumber = rnum.nextInt(107) + 1; pList.addNode(randomNumber); } }
补充说明
Random.nextInt(n)会生成0到n-1之间的整数,所以要得到1到107的数,只需要nextInt(107)加1就行,比原来的(107-1)+1写法更简洁,逻辑是完全一致的。
内容的提问来源于stack exchange,提问作者ckcp
相关产品推荐
相关产品推荐

