Логический метод продолжает возвращать true - PullRequest
0 голосов
/ 02 сентября 2018

Пожалуйста, помогите мне понять, почему булев метод, который я написал, не возвращается должным образом. Я прошу пользователя ввести серию целых чисел, которые будут храниться в массиве, который проверяется на наличие дубликатов.

import java.util.Scanner;

public class PokerHands 
{
    public static void main(String args[])
    {
        System.out.println(containsPair(welcome()));
    } // end main

    private static int[] welcome()
    {
        Scanner read = new Scanner(System.in);
        int[] poker_array = new int[5];

        System.out.println("Enter five numeric cards, no face cards. Use 2-9: ");
        for (int i = 0; i < 5; i++) {
            System.out.printf("Card %d: ", i + 1);
            int nums = read.nextInt();
            while (nums < 2 || nums > 9) {
            System.out.println("Wrong input. Choose from 2-9 only: ");
            nums = read.nextInt();
            } // end while
        poker_array[i] = nums;
        }

        for (int i = 0; i < poker_array.length; i++) {
            System.out.print(poker_array[i] + ", ");
        }

        return poker_array;
    } // end welcome()

    private static boolean containsPair(int hand[])
    {
        for (int i = 0; i < hand.length; i++) {
            for (int j = 0; j < hand.length; j++) {
                if (hand[i] == hand[j]) {
                    return true;
                } // end if
            } // end inner for
        } // end outer for

        return false;
    } // end containsPair()
} //end class

Выход: $ java PokerHands

Введите пять числовых карт, без лицевых карт. Используйте 2-9:

Карта 1: 2

Карта 2: 3

Карта 3: 4

Карта 4: 5

Карта 5: 6

2, 3, 4, 5, 6, правда

$ java PokerHands Введите пять числовых карт, без лицевых карт. Используйте 2-9:

Карта 1: 2

Карта 2: 2

Карта 3: 3

Карта 4: 4

Карта 5: 5

2, 2, 3, 4, 5, правда

$ java PokerHands

Введите пять числовых карточек, без лицевых карточек. Используйте 2-9:

Карта 1: 2

Карта 2: 2

Карта 3: 2

Карта 4: 2

Карта 5: 2

2, 2, 2, 2, 2, правда

Ответы [ 3 ]

0 голосов
/ 02 сентября 2018

Изменение метода с использованием HashSet. Код будет таким

private static boolean containsPair(int hand[])
{
    //adding to list all elements
    List<Integer> intList = new ArrayList<>();
    for (int i : hand) {
        intList.add(i);
    }
    //put all elements to set
    HashSet<Integer> zipcodeSet = new HashSet<>(intList);
    //if size not match , has a dublicate
    return zipcodeSet.size() != hand.length;

} // end containsPair()
0 голосов
/ 02 сентября 2018

Попробуйте изменить if в вашем логическом значении на следующее:

if (hand[i] == hand[j] && i != j)
0 голосов
/ 02 сентября 2018

Это потому, что для 1-го прохода i=0 и j=0. Так что это всегда вернет истину. Вы должны инициализировать j=i+1

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