我正在看这个程序,删除两个随机对象在同一时间从一个袋子。在袋子里有两种不同颜色的物体,根据物体的颜色,会发生不同的事情。我现在取随机值的方法是:
while (bag.size() > 1) {
count++;
int select1 = rnd.nextInt(bag.size());
Balls indexPos1 = bag.get(select1);
int select2 = rnd.nextInt(bag.size());
Balls indexPos2 = bag.get(select2);
System.out.println(select1);
System.out.println(select2);
但在程序结束时,如果它碰巧采取了同一对象的索引,那么袋内的颜色变化是错误的,错误的结果打印。我将粘贴到循环的其余部分。
int count = 0;
Random rnd = new Random();
// Depending on what colour the balls are either black ball is placed or white.
while (bag.size() > 1) {
count++;
int select1 = rnd.nextInt(bag.size());
Balls indexPos1 = bag.get(select1);
int select2 = rnd.nextInt(bag.size());
Balls indexPos2 = bag.get(select2);
System.out.println(select1);
System.out.println(select2);
if (bag.size() != 1) {
System.out.println(bag);
System.out.println("Printing size: " + bag.size());
if (bag.get(select1).equals(blackBalls) && indexPos2.equals(blackBalls)) {
System.out.println("Both balls are black.");
System.out.println("Removing black ball");
bag.add(blackBalls);
bag.remove(blackBalls);
bag.remove(blackBalls);
continue;
}if (indexPos1.equals(whiteBalls) && indexPos2.equals(whiteBalls)) {
System.out.println("both Balls are white");
bag.add(blackBalls);
bag.remove(whiteBalls);
bag.remove(whiteBalls);
System.out.println("Removing 2 white balls. adding black.");
continue;
}if (indexPos1.equals(whiteBalls) && indexPos2.equals(blackBalls) || indexPos1.equals(blackBalls) && indexPos2.equals(whiteBalls)) {
bag.add(whiteBalls);
bag.remove(select1);
bag.remove(select2);
System.out.println("Both balls are different.");
System.out.println("Removing white ball");
}
}
}
我不知道如何从一个数组中随机抽取两个对象,所以它不会选择同一个对象两次。任何帮助或反馈都将不胜感激。
1条答案
按热度按时间rta7y2nd1#
你有几个选择。
洗牌整个集合,然后采取前2个元素。
这当然会“破坏”它已经拥有的任何订单,而且它还需要付出一点沉重的代价,因为你只需要2个随机元素,但是
Collections.shuffle
除非你有成千上万的元素在里面,否则这不会是一个性能问题。继续挑选随机数。
将第二个“get a random index”调用转换为do/while循环,该循环不断地选取一个数字,直到得到一个不等于第一个元素的数字。请注意,如果你最终得到一个只有一个元素的包,那么这个循环将永远存在,所以请确保你首先检查这个元素并采取适当的行动。
选择一个随机数减去1,然后调整。
而不是
.nextInt(bag.size())
,做.nextInt(bag.size() - 1)
,如果这样得到的索引等于或大于第一个索引,则增量为1。然后有效地转化为从集合[0,1,2,3,5,6,7]中挑选一个均匀分布的随机数,假设一个包包含8个元素,选择的第一个索引是4。