Отклонить повторяющийся ввод (java)

новичок здесь. У меня есть код для аукциона, и я хочу иметь возможность отклонить или распечатать ошибку для собаки, которая уже выставлена ​​на аукцион.

private void startAuction() {

    boolean current = false;
    int auctionCount = 1;

    do {
        System.out.println("Dog name: ");
        String dogName = scan.nextLine().toLowerCase().trim();

        if (dogName.isEmpty()) {
            System.out.println("Error: Name can't be empty.");
            continue;           
            }

    for (int i = 0; i < dogs.size(); i++) {
        if (dogName.equals(dogs.get(i).getName())) {
            auction.add(new Auction(dogName));

            System.out.printf(dogName + " has been put up for auction in auction #%d", auctionCount);
            System.out.println();
            auctionCount++;                

            current = true;
            return;

        }else if (auction.get(i).getDogName().equals(dogName)) {
            System.out.print("Error: Dog has already been put up for auction");
        }
    }
        if (current == false) {
            System.out.println("Error: no such dog in the register");

        }

    }while(true);

Все остальное работает нормально, кроме этой части:

}else if (auction.get(i).getDogName().equals(dogName)) { System.out.print("Error: Dog has already been put up for auction");

Я действительно не знаю, почему, но он просто игнорирует все повторяющиеся входы. Любые идеи? Спасибо!

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

azurefrog 19.02.2019 22:04

Чтобы навалить @azurefrog, это классическая возможность использовать отладчик и изучить содержимое dogName и список собак, которых вы ищете.

nicomp 19.02.2019 22:07

@azurefrog да, я должен распечатать «ошибку», когда пользователь вводит одно и то же имя.

M Ann 19.02.2019 22:07

Вы можете использовать HashSet для обнаружения дубликатов.

MC Emperor 19.02.2019 23:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
97
1

Ответы 1

Итератор i предназначен для массива собак, но в «иначе, если» вы используете аукцион.get(i). Это значит, что это dogs.get(i)?

нет, я должен проверить аукционный список, если имя собаки там уже есть. Вот почему я использовал аукцион.get(i)

M Ann 19.02.2019 22:13

Извините, я сказал это неловко. Позвольте мне попытаться перефразировать... так что вы перебираете всех своих собак следующим образом: в этой итерации. Когда вы ссылаетесь на аукцион, вы используете «i»… но я считаю, что это относится только к массиву собак. Может ли это быть частью проблемы?

Jon 19.02.2019 22:15

Другие вопросы по теме