int[] numbers = new int[n];
for (int i=0; i<numbers.length; i++)
numbers[i] = i;
int[] result = new int[k];
for (int i=0; i<result.length; i++){
int r = (int)(Math.random() * n);
result[i] = numbers[r];
numbers[r] = numbers[n-1];
n--;
}
哪位高手帮忙解释下,后面的循环中第二个不同的随机数是如何生成的??
实在想不明白,怎么会和第一个随机数肯定不相同~~~
for (int i=0; i<numbers.length; i++)
numbers[i] = i;
int[] result = new int[k];
for (int i=0; i<result.length; i++){
int r = (int)(Math.random() * n);
result[i] = numbers[r];
numbers[r] = numbers[n-1];
n--;
}
哪位高手帮忙解释下,后面的循环中第二个不同的随机数是如何生成的??
实在想不明白,怎么会和第一个随机数肯定不相同~~~
解决方案 »
- java git 的问题求助
- java 求子字符串问题
- java link access 可以像其它DB一样指定ip ,端口号吗?
- 请教!
- thinking in java 上的代码,顺便散分
- 求助??setVisible与show有什么区别?
- 如何生成一个二叉树
- 小妹初学java,请教各位大哥一菜鸟级问题。
- 改写基类方法后的调用问题.下面是代码,问题时代码中的两个paintComponent(Graphics g)方法是何时被调用的?谁调用的?
- 有关线程的问题,请指教!
- 帮朋友问个repaint问题
- 这个错误是因为什么?Exception in thread "main" java.lang.NoClassDefFoundError:Example
int r = (int)(Math.random() * n); //生产一个0-1的随机数然后乘以N后复制给r
result[i] = numbers[r]; // 第一次将numbers[r]赋值给result[0]
numbers[r] = numbers[n-1]; //将numbers数组中倒数第二个赋值给numbers[r]
n--; //n自减
不明白LZ问题的意思??什么叫第二个不同的随机数??
是不是for循环进行到第二轮的时候random函数生成的数???
刚开始时numbers的内容不一样,到后来会有很多值一样,
他们不相同的前提是k必须小过n
不好意思,忘了说前提了,前提确实是k<n.
我昨天已经看懂了,
numbers[r] = numbers[n-1]; //将numbers数组中最后一个元素赋值给numbers[r]
如果想得到更随机的数字,可以用(new Random).nextInt(),这个方法更好