我知道如何使用java Random class随机编号。
这会随机出现0-13 13次之间的数字;
public static void main(String[] args) {
int ctr = 13;
int randomNum = 0;
while(ctr != 0) {
Random r = new Random();
randomNum = r.nextInt(13);
ctr--;
System.out.println(ctr +": " + randomNum);
}
}
问题
- 我想在0-13之间随机输入一次13次
- 如果第一个随机数是例如(5),那么我的第二个随机数将从0-13中随机任意数字排除5 ;
如果第二个随机数是例如(4),那么我的第三个随机数将再次从0-13中任意数字排除5和4 ; 等等.. 有办法吗?
答案 0 :(得分:12)
这样做:
List
在代码中:
List<Integer> nums = new ArrayList<Integer>();
for (int i = 0; i < 13; i++)
nums.add(i);
Collections.shuffle(nums);
for (int randomNum : nums)
System.out.println(randomNum); // use the random numbers
答案 1 :(得分:8)
问题 - 我想在0-13之间随机输入一次13次
我会从List
和Collections.shuffle(List)
以及Random
开始,例如 -
Random rand = new Random();
List<Integer> al = new ArrayList<>();
for (int i = 0; i < 14; i++) {
al.add(i);
}
Collections.shuffle(al, rand);
System.out.println(al);
或者,如果使用Java 8+,则IntStream.range(int, int)
生成List
。您可以使用forEachOrdered
来显示(在任何一个版本中,您都可以使用Collections.shuffle
隐式随机),例如
List<Integer> al = IntStream.range(0, 13).boxed().collect(Collectors.toList());
Collections.shuffle(al);
al.stream().forEachOrdered(System.out::println);
答案 2 :(得分:8)
我填写一个列表,随机播放,然后迭代它,每次都保证一个不同的数字:
public static void main(String[] args) {
int ctr = 13;
List<Integer> list = new ArrayList<>(ctr);
for (int i = 0; i < ctr; ++i) {
list.add(i);
}
Collections.shuffle(list);
for (int i = 0; i < ctr; ++i) {
System.out.println(ctr + ": " + list.get(i));
}
}
答案 3 :(得分:2)
推荐shuffle的答案显示正确的方式,因为它优雅而快速。
仅为了完整性:您还可以稍微改变您的代码。添加找到的任何随机数到数组。然后检查下一个随机数是否已在数组中。如果是,请删除该号码并获取一个新号码。这样做直到数组填充13个数字。
像这样:
List<Integer> numbers = new ArrayList<Integer>();
Random r = new Random();
while (numbers.size() < 14) {
randomNum = r.nextInt(13);
if (!numbers.contains(randomNum)) {
numbers.add(randomNum);
}
}
答案 4 :(得分:1)
您可以使用设置来避免重复
代码:
Set<Integer> set1 = new LinkedHashSet<>();
int ctr = 13;
int randomNum = 0;
while (ctr == 13) {
Random r = new Random();
randomNum = r.nextInt(13);
set1.add(randomNum);
System.out.print(randomNum + " ");
if (set1.size() >= 13) {
ctr = 12;
}
}
System.out.println("");
set1.forEach(i -> System.out.print(" " + i));
输出:
4 11 11 11 5 1 9 12 5 7 5 2 9 10 1 7 10 3 11 8 9 3 12 9 2 6 7 10 12 3 11 1 10 3 6 2 0
4 11 5 1 9 12 7 2 10 3 8 6 0
答案 5 :(得分:1)
ArrayList<Integer> nums = new ArrayList<Integer>();
Random generator = new Random();
for (int i = 0; i < 14; i++) {
nums.add(i);
}
for (int i = 0; i < 14; i++) {
int size = nums.size();
int chosen = generator.nextInt(size);
System.out.println(nums.get(chosen) + " ");
nums.remove(chosen);
}