У меня есть этот код, который вызывает функцию проверки действительного кода в 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();
}
мой цикл do while просит пользователя ввести код, если он не соответствует требованиям функции checkCode или уже существует в базе данных, пользователь должен ввести его повторно. Я пытаюсь оптимизировать первый код, который работал у меня, но когда я заменяю его вторым кодом, он пропускает ошибку и продолжает вводить следующий код.
Является ли опубликованный вами код именно тем, что вы используете? Я только что пробовал запустить его, и оба примера работают точно так же.




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;
}
}
Этот ответ был бы значительно лучше, если бы вы объяснили, почему вы внесли эти изменения.
Я не совсем уверен, в чем проблема - не могли бы вы уточнить «не удается вернуть ввод»? Я не понимаю, где вы пытаетесь вернуть ввод в коде «до» или «после». Вы получаете сообщение об ошибке или здесь не показан код, связанный с реальной проблемой?