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

时间:2018-08-31 00:12:05

标签: 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++;
}

2 个答案:

答案 0 :(得分:2)

一种方法是用数字填充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);

然后,每当需要一个随机数时,您都可以简单地调用索引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++);
}

答案 1 :(得分:-1)

我认为GBlodgett的想法正确,但是另一种方法是将猜测存储在列表中并放置

if(guesses.contains(guess)
   continue;

while循环的第一行