Простой Java-симулятор лотереи с использованием цикла math.random и while? - PullRequest
0 голосов
/ 05 октября 2019

Как мне отформатировать цикл while для проверки на наличие дубликатов и, если есть дубликаты, чтобы не возвращать эти числа?

 import java.util.Scanner;

public class LotterySimulator 
{
   public static void main(String[] args)
   {
      final int POOL1 = 68;
      final int POOL2 = 25;

      long ball1, ball2, ball3, ball4, ball5, pball;

      ball1 = Math.round(POOL1*Math.random()) + 1;
      ball2 = Math.round(POOL1*Math.random()) + 1;
      ball3 = Math.round(POOL1*Math.random()) + 1;
      ball4 = Math.round(POOL1*Math.random()) + 1;
      ball5 = Math.round(POOL1*Math.random()) + 1;
      pball = Math.round(POOL2*Math.random()) + 1; 

1 Ответ

0 голосов
/ 05 октября 2019

Вы можете использовать Set collection для хранения уникальных значений. Метод add() возврат true, если этот набор еще не содержит указанный элемент

Например:

    public static void main(String[] args) {
        final int POOL1 = 68;
        final int POOL2 = 25;

        int i = 0;
        Set<Long> ballSet = new HashSet<>();
        while (i < 5) {
           long ball = Math.round(POOL1 * Math.random()) + 1;

           if (!ballSet.add(ball)) {
               continue;
           };
           i++;
        }
        long pball = Math.round(POOL2 * Math.random()) + 1;
        while (ballSet.contains(pball)) {
            pball = Math.round(POOL2 * Math.random()) + 1;
        }
        String winner = ballSet.stream().map(Object::toString).collect(joining(", "));
        System.out.println("Your winning numbers are: " + winner);
        System.out.printf(" and the powerball is: %d", pball);
    }
 }
...