从 1,2,3…h 中随机取 k 个中奖号码。
package im.zyf.javacore;
import java.util.Arrays;
import java.util.Scanner;
public class LotteryDrawing {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("how many numbers do you need?");
int k = in.nextInt();
System.out.println("what is the highest number?");
int h = in.nextInt();
int[] harr = new int[h];
for (int i = 0; i < h; i++) {
harr[i] = i + 1;
}
int[] karr = new int[k];
for (int i = 0; i < k; i++) {
int random = (int) (Math.random() * h);
karr[i] = harr[random];
//将数组最后的值,代替掉被取走的值
harr[random] = harr[h - 1];
//数组长度减1
h--;
}
Arrays.sort(karr);
System.out.println(Arrays.toString(karr));
}
}
Console:
how many numbers do you need?
3
what is the highest number?
4444444
[433177, 827621, 2607294]
有几个点:
- 取过的数不能再取
- 取后升序排列
关键点:
- 每次取的都是下标,而不是实际的值。下标指向包含尚未抽取的数组元素
– EOF –