Как проверить наличие двух одинаковых чисел в одной строке ввода - PullRequest
0 голосов
/ 12 октября 2019

Я делаю покерную игру на Java, используя Eclipse, мне нужна помощь в создании кода, чтобы найти PAIR для одной строки ввода. Если пользователь вводит: 12,11,5,2,12, то как я могу определить, есть ли на входе два одинаковых числа, и распечатать его как PAIR.

Так что в основном я уже взял строковый ввод и затем преобразовал его вмассив String с функцией разделения для определения чисел, а затем преобразованный в массив Int.

Когда пользователь вводит: 12,3,4,5,12 - он должен печатать в выводе: PAIR

Ответы [ 5 ]

2 голосов
/ 12 октября 2019

Просто используйте набор и добавьте элемент. Если add возвращает false, происходит дублирование, и вы можете делать любую логику, какую захотите. https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#add(E)

Set<String> cards = new HashSet<>();
if (!cards.add(something))  {
    // match of two cards found
}

Если вам нужно, чтобы это были числа, используйте Integer, а не int, поскольку последний является примитивом, а не объектом.

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

Как указывают другие ответы, использование набора позволяет легко находить дубликаты, но не может определить разницу между парой, поездкой и четырехугольником, а также между двумя парами и фулл-хаусом. Это также не помогает найти остальные покерные руки.

Лучший подход - просто отсортировать массив чисел, которые вы используете для представления карт, а затем выполнить итерацию по отсортированному списку в поисках пар и тройок. (который теперь будет смежным). Это также поможет вам искать стриты и поможет в ранжировании между похожими руками.

Кроме того, обычно лучше искать руки сверху вниз: т. Е. Проверить на стрит-флеш, затем на четверных, затем на фулл-хаус, затем сбросьте ... до одной пары, но без пары.

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

Как хранится пользовательский ввод. Например, сохраните его в виде массива, и следующий будет выводиться в соответствии с запросом.

public static void main(String[] args) {
    int[] nums = new int[]{12,11,5,2,12};
    System.out.println(isPair(nums));
}

private static String isPair(int[] nums){
    Set<Integer> set = new HashSet<>();
    for(int n : nums){
        if(set.contains(n)){
            return "PAIR";
        }else{
            set.add(n);
        }
    }
    return null;
}
0 голосов
/ 12 октября 2019

Вы можете использовать массив, где позиция + 1 - номер карты, например:

5 5 10 11 7

[0, 0, 0, 0, 2,..., 1, 0, 0, 1, 1, ...]

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

Попробуйте использовать набор. Элемент может содержаться только один раз в наборе, поэтому contains() вернет true, если в вашем массиве есть повторяющиеся числа.

public static void findPairs(int[] numbers) {
  Set<Integer> set = new HashSet<>();
  for (int number: numbers) {
    if (!set.add(number)) {
      System.out.println("PAIR: " + number);
    }
  }
}

Имейте в виду, что если ваш массив содержит более 2 дубликатов одного и того же числа, он напечатает PAIR: n более одного раза - он не найдет более одного дубликата данного числа всписок.

В этом случае вы можете рассмотреть возможность удаления номера и отслеживания тех пар, которые вы уже поймали.

...