问题
我正在构建一个应用程序,它可以从一系列条目中创建抽奖抽奖。开始抽奖时,用户可以输入一个整数,该整数表示抽奖将返回多少中奖者。应用程序使用randomGenerator从条目arrayList中选择一个随机索引。这个randomGenerator位于for循环中,该循环检查它被迭代了多少次,并将其与numberOfWinners整数进行比较。
假设用户插入了“3”作为他们的数字的整数。该应用程序将返回三个随机条目,但有时会有重复项。
所以我很自然地研究了如何避免重复。我遇到了HashSet。如果将两个重复的条目添加到HashSet,则只会添加一个唯一的条目。然后我将这个HashSet转换为一个新的ArrayList,并将其显示在我的Android视图中。
然而,HashSet并没有解决这个问题。如果用户为numberOfWinners输入“3 ”,并且有一个重复项,则最终结果将只有2个条目。
如何解决这个问题?
下面是我的代码片段:
Set <Entry>drawSet = new HashSet<Entry>();
//Picks random int from size of entry arrayList
Intent viewDrawIntent = getIntent();
int currentRaffleID = viewDrawIntent.getIntExtra("raffleIndexInList", 0);
int newNoOfWinners = viewDrawIntent.getIntExtra("extraNoOfWinners", 0);
Raffle currentRaffle = Raffle.raffleArrayList.get(currentRaffleID);
for (int i = 1; i < (currentRaffle.getEntryArrayList().size()); i++) {
if(i != newNoOfWinners){
int randomInt = randomGenerator.nextInt(currentRaffle.getEntryArrayList().size());
Entry randomEntry = (currentRaffle.getEntryArrayList()).get(randomInt);
//Adds new Entry to entryDraw Array
drawSet.add(randomEntry);
}
else{
}
}
ArrayList<Entry> entryDraw = new ArrayList<Entry>(drawSet);
您可以通过循环直到 Set 包含所需数量的获胜者来解决此问题。
工作示例:
List<Integer> tickets = Arrays.asList(1, 2, 3, 4, 5);
Set<Integer> winners = new HashSet<Integer>();
Random random = new Random();
while (winners.size() < 3) {
winners.add(tickets.get(random.nextInt(tickets.size())));
}
您可以使用HashSet来告诉您ArrayList的索引是否已被使用。
如果要从列表中选择3个唯一索引,请初始化一个HashSet以包含ArrayList的所有索引。然后,每次绘制随机索引时,您都会检查HashSet是否包含该索引。
您重复该过程,直到您有3个以前从未使用过的唯一索引。
问题内容: 我想下载文件以供进一步使用,这是找到的最好方法,但是当我看到Event 创建的日志时,URL已被queryString修改,例如: 数字也是随机的。 我不知道为什么会这样! 问题答案: 只需使用cache即可:true。jQuery会自动为您在URL末尾添加一个时间戳,以确保永远不会缓存ajax请求。 从jQuery文档 默认值: true,对于dataType’script’和’js
我在mysql数据库中有一个数组数据,我想在使用Ajax得到结果后,用for循环逐个显示出来。过程是这样的。 这是将呈现每个项的段落 null 当我尝试使用for循环时,它会说语法错误,意外的for循环被取走,我该如何解决这个问题,例如,这里我使用sample for循环来使事情尽可能简单。
所以我正在尝试创建这个循环,它可以从ArrayList中移除给定字符串中的特定字符。问题是,当一行中有两个相同的字符时,它会遗漏第二个字符,因为当第一个字符被移除时,第二个字符会在数组列表中向下推一个位置。这是我目前所掌握的。有人知道怎么解决这个吗?我仍然是java的初学者,所以任何帮助都将非常感谢。 从本例中打印出来的内容在:[u,B,u,o,p]之后,而我希望它在:[u,u,o,p]之后
我刚学过JAVA,我对这段代码有一个问题: 现在我的包含!在这种情况下,我如何简单地避免重复?我以为HashSet不允许重复。
我想把列表理解替换为for循环
问题内容: 我有一个数组: 我需要找到具有相同setid的条目,将它们的收入加起来并删除重复的条目-最后,它应该看起来像这样: 有人知道我的问题有解决方案吗?还是我必须走很长的路并手动执行每个步骤? 谢谢和问候 问题答案: 只需创建一个新数组,您就可以使用setid作为键来快速进行寻址。并在最后对数组重新索引。