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

Мне не удалось заставить его работать с тем, что у меня есть, и поэтому я уверен, что упускаю что-то важное.

System.out.println("\nEnter name: ");
String name = in.nextLine();

int length = name.length();

for (int x = 0; x < length; x++) {
    
    if(name.substring(x,x+1).equals(".")) {
        
        System.out.println("Error! - name can not contain (.) values\n"
                         + "***************************************************");
        
            System.out.println("\nWould you like to capture another name?" +
            "\nEnter (1) to continue or any other key to exit");
            String opt1 = in.nextLine();

                // If statement to run application from the start 
                if (opt1.equals("1")) {
       
                     System.out.println("menu launch");
                }
                else { System.exit(0); }
    }            
    else { break; } 
}
1
Brad 17 Сен 2021 в 12:34

2 ответа

Лучший ответ

Не изобретайте велосипед. Вместо того, чтобы перебирать символы строки, вы можете просто использовать contains метод:

if (name.contains(".")) {
    // logic comes here...
2
Mureinik 17 Сен 2021 в 09:38

Хотя Мюрейник прав в отношении наилучшего способа достижения вашей цели, причина, по которой ваша функция не работает, заключается в вашем операторе else { break; } .

break завершает цикл, поэтому, если самым первым символом не является ., цикл будет завершен сразу после первой итерации. Если вы хотите увеличить цикл, правильное ключевое слово - continue, хотя в этом случае в нем нет необходимости, потому что вся логика размещена внутри оператора if. Поскольку нет другой логики, которой следует избегать, вам следует удалить оператор else.

0
dbrewster 17 Сен 2021 в 17:01