java - 不在循环中多次生成相同的随机数

标签 java loops random

我是Java新手,所以如果有任何不清楚的地方(或者代码真的很糟糕),请提前道歉,但我正在尝试构建一个程序,让计算机猜测用户拥有的两位数代码输入(即 secretCode)。下面的代码工作正常,它将生成一个随机代码,然后将其与密码进行比较,并检查是否在正确的位置输入了位置。

但是,我该如何做到这一点,以便每次计算机猜测时,它都无法猜测它之前猜测过的数字(例如,如果它在第一次猜测时猜测了 57,则它无法再次选择 57循环持续时间)。基本上,我希望计算机记录它所做的猜测,并且不再重复。有什么想法可以做到这一点(如果可能的话,无需对程序进行大量重写)?或者我在这方面走错了路?

while (guesses < 10)
      int[] compCode = computer.getComputerCode(); //This line gets a random two digit array of ints
      System.out.print("Computer guess: ");
      Arrays.stream(compCode).forEach(System.out::print);
      correctPositions = getPosition(compCode, secretCode);

      System.out.println("\nYou picked " + correctPositions + " numbers in the correct position.");
      guesses++;
}

最佳答案

实现此目的的一种方法是用数字填充 ArrayList,然后随机播放 ArrayList:

ArrayList<Integer> guesses = new ArrayList<>();
for(int i =0; i < 100; i++) {
  guesses.add(i);
}
//guesses now contains numbers 0-99
Collections.shuffle(guesses);

然后,每当您需要随机数时,您都可以简单地调用猜测索引(确保您跟踪您所在的索引)

一个例子可能是这样的:

while(some_condition) {
   //start count at -1, so when we add one it will be 0
   //which is the first index of the ArrayList
   int count = -1;
   //Some code
   guesses.get(count++);
}

关于java - 不在循环中多次生成相同的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52106894/

相关文章:

java - ReentrantReadWriteLock 和同步块(synchronized block)

java - 如何使用sql提取源表?

java - 编译时"Unchecked or unsafe operations"错误

c - 反转用户输入的数字

r - 遍历数据帧以提取 R 中值超过阈值的特定对

未打印出程序的返回值时计算的字符串长度不正确

algorithm - 我什么时候应该编写自己的随机数算法而不是使用常用的数学函数?

java - 为什么 java ref vars 调用基于实际对象的方法,而变量基于 ref 变量类型?

PHP - mt_rand 函数,如何使用它生成随机的 20 个字母密码?

java - java中的简单加密-无 key /密码