Java - проверка на x одинаковых целых чисел в списке целых чисел - PullRequest
0 голосов
/ 04 июня 2018

Я хотел бы просмотреть список целых чисел и выполнить действие, если я найду 6 одинаковых целых, или другое, если есть 5 одинаковых, или другое, если есть 4 одинаковых и т.д. ... Как я могу это сделать,У меня есть метод:

public int calculatePoints(ArrayList<Integer> dice) {
    //Check for 6 alike
    //if not, check for 5 alike
    //if not, check for 4 alike
}

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Поскольку у меня недостаточно репутации, чтобы редактировать свой пост, вот мой ответ @GBlodgett:

Привет!Спасибо за ответ.Я нахожусь в процессе создания игры Farkle, поэтому мне нужно выяснить, сколько 1, 2, 3, 4, 5 и 6 в списке, а затем дать очки (следуя правилам).Я сделал код, который, кажется, работает, хотя должен быть более эффективный способ сделать это.Не стесняйтесь взглянуть и дать мне некоторую обратную связь:

public int calcPoints (ArrayList dice) {

    int points = 0;
    Map<Integer,Integer> numOfDice = new HashMap<Integer,Integer>();
    numOfDice.put(1, 0);
    numOfDice.put(2, 0);
    numOfDice.put(3, 0);
    numOfDice.put(4, 0);
    numOfDice.put(5, 0);
    numOfDice.put(6, 0);

    for(Integer num : dice) {
        if(numOfDice.get(num) == null) {
            numOfDice.put(num, 1);
        }
        else {
        numOfDice.put(num, numOfDice.get(num)+1);
        }
    }
    for(int i=1; i <= numOfDice.size(); i++) {
        if(i == 1) {
            if(numOfDice.get(1) < 3) {
                points += numOfDice.get(1)*100;
            }
            else if(numOfDice.get(1) == 3) {
                points += 1000;
            }
            else if(numOfDice.get(1) == 4) {
                points += 2000;
            }
            else if(numOfDice.get(1) == 5) {
                points += 3000;
            }
            else if(numOfDice.get(1) == 6) {
                points += 5000;
            }
        }
        else {

        if(i == 5) {
            if(numOfDice.get(5) < 3) {
                points += 50*numOfDice.get(5);
                continue;
            }
        }
        //All else
        if(numOfDice.get(i) == 3) {
            points += 100*i;
        }
        else if(numOfDice.get(i) == 4) {
            points += 200*i;
        }
        else if(numOfDice.get(i) == 5) {
            points += 300*i;
        }
        else if(numOfDice.get(i) == 6) {
            points += 400*i;
        }
    }
}
    return points;

}

0 голосов
/ 04 июня 2018

Вот способ сделать это: ( Предполагая, что вы хотите проверить только число, которое встречается чаще всего )

public static int calculatePoints(ArrayList<Integer> dice) {
        int max = 0;
        for(Integer die : dice) {
            int temp = Collections.frequency(dice, die);
            if(temp > max) {
                max = temp;
            }
        }
        if(max >= 6) {
            //Do stuff
        } else if (max >=5) {
            //Do stuff
        } else if (max >= 4) {
            //Do stuff
        }        
        return 0;
    }

Базовая логика:

-Пройдите через каждый Integer в массиве и используйте метод частота , чтобы увидеть, сколько раз это произошло.Если оно больше максимального, разрешите число до max.Затем, в конце, это операторы if-else, чтобы проверить, сколько раз произошло число, и сделать то, что вы хотите внутри оператора if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...