Как оптимизировать эту функцию "checkCode" в java

У меня есть этот код, который вызывает функцию проверки действительного кода в java

 do {
        System.out.print("Enter Code: ");
        infor.setCode(sc.nextLine());

        if (check.checkCode(infor.getCode()) == true) {
            boolean aa = true;
            for (int i = 0; i < list.size(); i++) {
                if (infor.getCode().equals(list.get(i).getCode())) {
                    aa = false;
                    System.out.println("Code already exists in DB");
                    break;
                }
            }   
            if (aa) {
                break;
            } else {
                continue;
            }

        }
        System.out.println("Failed!! Try again!");
    } while (true);

и я пытаюсь оптимизировать этот код:

boolean aa;
    do {
        aa = true;
        System.out.print("Enter Code: ");
        infor.setCode(sc.nextLine());

        if (check.checkCode(infor.getCode()) == true) {
            for (int i = 0; i < list.size(); i++) {
                if (infor.getCode().equals(list.get(i).getCode())) {
                    aa = false;
                    System.out.println("Code already exists in DB");
                    break;
                }
            }

        }
        System.out.println("Failed!! Try again!");
    } while (aa == false);

но он не может вернуть ввод, который не соответствует функции требований, и не позволяет мне вводить заново. Любое решение для этого?

public boolean checkCode(String input){
    String regex = "^[A-Za-z0-9]{1,15}$";
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(input);
    return m.matches();
}

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

DaveyDaveDave 02.11.2018 09:48

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

jame focus 02.11.2018 09:55

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

DaveyDaveDave 02.11.2018 10:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
3
80
1

Ответы 1

private static final Pattern PATTERN = Pattern.compile("^[A-Za-z0-9]{1,15}$");
private static final Predicate<String> IS_CODE_VALID = code -> PATTERN.matcher(code).matches();

public static String getNewCode(Scanner scan, Set<String> existedCodes) {
    while (true) {
        System.out.print("Enter Code: ");
        String code = scan.nextLine();

        if (existedCodes.contains(code))
            System.out.println("Code already exists in DB");
        else if (IS_CODE_NOT_VALID.test(code))
            System.out.println("Failed!! Try again!");
        else
            return code;
    }
}

Этот ответ был бы значительно лучше, если бы вы объяснили, почему вы внесли эти изменения.

DaveyDaveDave 02.11.2018 10:06

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