for(int i=0;i<maxNumbers;i++)
{
int r = rgen.nextInt(100) + 1;
if(randomNumbers.contains(r))
{
randomNumbers.remove(r);
}
s += r + ",";
randomNumbers.add(String.valueOf(r));
}
int index = jList1.getSelectedIndex();
// check that selected item matches number generated
if(index >= 0)
{
// get selected item
String item = (String)jList1.getSelectedValue();
// check if this item in number list
if(randomNumbers.contains(item))
{
randomNumbers.remove(item);
}
我能够从1-100的数组列表中生成5个随机数,但是我无法获得randomNumbers.remove(item)以防止重复输入。我添加了部分代码,使其不会超级庞大。关于如何不重复数字的任何帮助或建议?
答案 0 :(得分:0)
如果您在之前检查过某个号码是否在randomeNumbers
中,那么您就不需要将其删除。
答案 1 :(得分:0)
如果您只是想避免重复:
for(int i=0;i<maxNumbers;i++)
{
int r = rgen.nextInt(100) + 1;
if(!randomNumbers.contains(r))
{
randomNumbers.add(String.valueOf(r));
s += r + ",";
}
}
但是你可能想继续前进,直到它满了:
int i=0;
while(i<maxNumbers)
{
int r = rgen.nextInt(100) + 1;
if(!randomNumbers.contains(r))
{
randomNumbers.add(String.valueOf(r));
s += r + ",";
i++;
}
}
不确定你想要对jList做什么......
答案 2 :(得分:0)
在上面的代码中,如果您正在跟踪集合或列表中的数字,则不清楚。您应该在一组中跟踪它们,然后生成一个随机数,直到找到一个不在您的集合中的数字。完成后,请完成所有必要的转换/格式化。
你也可以预先填充一个列表,然后将其洗牌,最后选择前几个。
在Java中
public static List<Integer> randomNumbers(int n, int take) {
ArrayList<Integer> al = new ArrayList<>();
for (int c = 0; c < n; ++c) {
al.add(c);
}
Collections.shuffle(al);
return al.subList(0, take);
}
Clojure的
user=> (->> (range 1 101) shuffle (take 5))
(40 23 32 12 72)
它不是最有效的方法,但它可以正常工作,并且不易出错。