Java 循环中没有重复的随机数

Java 循环中没有重复的随机数,java,random,Java,Random,我是Java的初学者,现在,我正在尝试用电脑播放器制作猜谜游戏。我很流利,如果我的英语语法不好,请原谅。我会尽我所能把这一点说清楚 我试图阻止整数中重复的随机数。我使用arraylist从列表中随机选择一个,似乎随机选择的值仍然相同,我认为随机选择的值不会相同。我使用了Collections.shuffle,但它只在数组中有效。我使用了arraylist contains,但它需要至少有一个数组才能生成true或false,当java在开始运行时数组为空时,它无法确定true和false。 有人

我是Java的初学者,现在,我正在尝试用电脑播放器制作猜谜游戏。我很流利,如果我的英语语法不好,请原谅。我会尽我所能把这一点说清楚

我试图阻止整数中重复的随机数。我使用arraylist从列表中随机选择一个,似乎随机选择的值仍然相同,我认为随机选择的值不会相同。我使用了Collections.shuffle,但它只在数组中有效。我使用了arraylist contains,但它需要至少有一个数组才能生成true或false,当java在开始运行时数组为空时,它无法确定true和false。 有人能帮我阻止这种重复吗?提前谢谢你。 这个“inta”来自另一个类文件(它是一个Math.random文件)


您可以升级您的条件,并限制迭代。比如说,

    int maxGame = 100;
    int i = 0;

        do {

            p1 = (rand.nextInt(60 - 50) + 50);
            p2 = (rand.nextInt(60 - 50) + 50);
...

           i++;
        } while (i<maxGame && p1 != a && p2 != a);
intmaxgame=100;
int i=0;
做{
p1=(兰特·耐克斯汀(60-50)+50);
p2=(兰特·耐克斯汀(60-50)+50);
...
i++;

}而(i你可以生成一个新的随机数,如果玩家已经有了:

    ArrayList myArray = new ArrayList();
    ArrayList secArray = new ArrayList();

    Random rand = new Random();
    int p1;
    int p2;

    do {

        p1 = (rand.nextInt(60 - 50) + 50);

        while (myArray.contains(p1))
        {
            p1 = (rand.nextInt(60 - 50) + 50);
        }

        p2 = (rand.nextInt(60 - 50) + 50);

        while (secArray.contains(p2))
        {
            p2 = (rand.nextInt(60 - 50) + 50);
        }

        myArray.add(p1);
        secArray.add(p2);

使用
集合
来拒绝已经尝试过的随机猜测。
集合
将比
列表
更有效一点,但更重要的是,它将让任何阅读您的代码的人都清楚,集合中的每个元素只能出现一次。这使您的代码更加清晰

Set<Integer> p1Guesses = new LinkedHashSet();
Set<Integer> p2Guesses = new LinkedHashSet();

int p1, p2;
do {
  p1 = rand.nextInt(10) + 50;
  while (!p1Guesses.add(p1))
    p1 = rand.nextInt(10) + 50;
  p2 = rand.nextInt(10) + 50;
  while (!p2Guesses.add(p2))
    p2 = rand.nextInt(10) + 50;
  ...
Set p1Guesses=newlinkedhashset();
Set p2Guesses=new LinkedHashSet();
int p1,p2;
做{
p1=兰特·耐克斯汀(10)+50;
而(!p1guesss.add(p1))
p1=兰特·耐克斯汀(10)+50;
p2=兰特·耐克斯汀(10)+50;
而(!p2guesss.add(p2))
p2=兰特·耐克斯汀(10)+50;
...
通过使用
LinkedHashSet
,将记录猜测的顺序。
Set
add()
方法返回
false
,如果添加的元素已经存在于集合中,则条件可以控制循环


或者,您可以将该范围内的所有数字添加到一个列表中,并将其删除。但是如果您想打印已尝试的猜测,它将稍微改变逻辑。本质上,您需要在每个无序列表中找到
a
的索引。以较低者为准。您可以打印从零到其re的每一个猜测字符串的a回顾正确的索引。

“我认为随机不会有相同的值”-随机并不意味着不重复(这已经打破了随机的定义)在代码中,您总是有伪随机数生成器。在向数组添加数字之前,您可以使用.contains查看它是否已经是数组列表,如果已经是,则重新滚动。也许您可以使用树集(因此您只能按排序顺序使用唯一的数字),并检查集合是否包含您生成的数字。如果包含,请重试。否则,请使用number.Collections.shuffle,但它仅在数组中工作:no.Collections.shuffle()将列表作为参数..shuffle()有什么问题?为什么在Java 5发布12年后,您仍然使用原始ArrayList而不是通用ArrayList?可能是Wow的副本!它很有效!非常感谢!!!我非常感谢!!!我向您保证,我将向任何需要帮助的人支付预付款!
Set<Integer> p1Guesses = new LinkedHashSet();
Set<Integer> p2Guesses = new LinkedHashSet();

int p1, p2;
do {
  p1 = rand.nextInt(10) + 50;
  while (!p1Guesses.add(p1))
    p1 = rand.nextInt(10) + 50;
  p2 = rand.nextInt(10) + 50;
  while (!p2Guesses.add(p2))
    p2 = rand.nextInt(10) + 50;
  ...