Как найти объект в массиве с помощью метода Contains - PullRequest
2 голосов
/ 07 марта 2019

Привет, у меня есть класс массива, который содержит банковские данные: номер счета, баланс, тип счета и статус. массив построен с помощью конструктора:

Bank.accounts.add(new Account(this.accNumber, this.type, this.balance, this.status));

и когда я пытаюсь найти число (другим способом), оно не находит его.

Метод получает ввод номера банковского счета, а затем сравнивает его со списком массивов счетов. Если найден, интерфейс консоли открывается, однако он никогда не находит номер учетной записи. Я пробовал сканировать целое число, строку в целое число и использовать метод содержимого изнутри метода или как отдельный метод (как в примере ниже), но безуспешно.

Метод:

public void accountActions() {

    System.out.println("Enter number of account for more info");
    Boolean isFinished = false;
    while (!isFinished) {
        try {

            String scan = input.nextLine();
            Bank.number = Integer.parseInt(scan);
            isFinished = true;
        } catch (NumberFormatException e) {
            System.out.println("Please enter again\n------------------------------");
            isFinished = false;
        } catch (InputMismatchException e) {
            System.out.println("Please enter again\n------------------------------");
            isFinished = false;
        }
    }
    if (checkAccountNumber(number) == true) {
        System.out.println("=====================================");
        System.out.println("=                                   =");
        System.out.println("=   Enter command number            =");
        System.out.println("=                                   =");
        System.out.println("=   1. Withdraw money               =");
        System.out.println("=   2. Deposit                      =");
        System.out.println("=   3. Total money in all accounts  =");
        System.out.println("=                                   =");
        System.out.println("=====================================");

    } else {
        System.out.println(
                "No account was found by that number, would you like to try again?\n(((Yes/No)))\n---------------");
        yesNo("accountActions");
    }
}

И автономный метод:

public boolean checkAccountNumber(int a) {
    boolean check = false;
    if (Bank.accounts.contains(a)) {
        check = true;
    }
    return check;
}

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Вы сравниваете учетную запись с номером учетной записи.Вместо этого вы должны сделать это.

public boolean checkAccountNumber(int a) {

    for (Account account of Bank.accounts){
        if (account.accNumber.equals(a)) {
            return true;
        }
    }
    return false;
}
0 голосов
/ 07 марта 2019

Поскольку вы передаете int, а Bank.accounts - это List из Account объектов, ваш код не работает.

Вы можете использовать Stream.anyMatch, чтобы проверить наличие Account с переданным номером счета.

Основным преимуществом anyMatch над циклом является то, что оно короткое замыкание, оно не будет оценивать все элементы потока, которое будет возвращено при первом совпадении.

Согласно Документация Java из anyMatch:

Может не оценивать предикат по всем элементам, если в этом нет необходимости определение результата.

Пример кода:

class Bank {
    static List<Account> accounts;
    ...
}
public boolean checkAccountNumber(int a) {
    return Bank.accounts.stream().anyMatch(acc -> acc.accNumber.equals(a)); 
}

Вы могли бы избежать этой проблемы с помощью , а не , используя Raw типов. Создайте свой список Bank.accounts в List<Account>, чтобы вы могли отследить ошибки такого рода во время компиляции.

...