代码:
int n=5,k=3; int[] numbers = new int[n]; for (int i = 0; i < numbers.length; i++) numbers[i] = i + 1; int[] result = new int[k]; for (int i = 0; i < result.length; i++) { // make a random index between 0 and n - 1 int r = (int) (Math.random() * n); result[i] = numbers[r]; numbers[r] = numbers[n - 1]; n--; } // print the sorted array Arrays.sort(result); for (int r : result) System.out.println(r);
个人认为,生成的号码还是有可能重复,大家认为呢?
悬赏不多,大家都来讨论下吧。说说自己观点的理由
嗯,随机不重复,就是洗牌算法了
numbers[r] = numbers[n - 1];
写成 numbers[n - 1] = numbers[r] 就不重复了。
哎,问问题不悬赏,真扣。也就我好心回答你了。
像你说的倒过来倒是出现重复的值了。
像你说的倒过来倒是出现重复的值了。原先的倒是测试多次,没有出现重复的值。