2016-09-16 4 views
0

Я начинающий программист (первый пост здесь!), И я не могу понять, как создать сообщение об ошибке с циклом «делать пока». Если данный ввод отсутствует в алфавите, он должен отображать сообщение об ошибке, пока не будет дан ввод только с буквами, а затем перейдите к остальной части программы. Мой код, кажется, работает навсегда, даже если ему задан правильный ввод. Любые предложения приветствуются! :)Сообщение об ошибке while while

do { 
    input = JOptionPane.showInputDialog("What is your name?"); 
    if (input.contains("[a-zA-Z]")) 
     name = input; 
    else 
     System.out.println("Please enter a valid name containing: ‘a-z’ or ‘A-Z’ lower or upper case"); 
} while (!input.contains("[a-zA-Z]")); 

ответ

0

Вы используете неправильный метод, чтобы подтвердить свой регулярное выражение. .contains() ожидает последовательность символов. Это не то, что вы хотите. Вы должны использовать метод .matches().

String input = ""; 
do{ 
input = JOptionPane.showInputDialog("What is your name?"); 
    if (input.matches("[a-zA-Z]+")) // Replacing the contains() 
     name = input; 
     else 
     System.out.println 
    ("Please enter a valid name containing: ‘a-z’ or ‘A-Z’ lower or upper case"); 
}while (!input.matches("[a-zA-Z]+")); //Once again replacing contains() 
+0

Это работало отлично, спасибо так много! :) –

+0

@GregSmith Добро пожаловать. –

0

String.contains() метод соответствует набору символов. То, что вы указали, является регулярным выражением, поэтому вы должны использовать String.matches() или класс Pattern для выполнения проверки.

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

Pattern p = Pattern.compile("[a-zA-Z]+"); 
Matcher m = p.matcher(input); 
if(m.matches){ 
//Do something 
} 

Обратитесь к этому documentation для более подробной информации

0

input.contains("[a-zA-Z]") проверяет, является ли входной содержит текст [A-Za-Z].

Вы можете использовать метод matches.

input.matches("[a-zA-z]+") 

Кроме того, вы должны использовать [A-Za-Z] + в качестве шаблона, так как вы пытаетесь соответствовать один или несколько алфавитов.

0

Проблема связана с тем, как вы проверяете данный ввод.

String input; 
     String name = ""; 
     do { 
      input = JOptionPane.showInputDialog("What is your name?"); 
      if (input.matches("[a-zA-Z]+")) { 
       name = input; 
      } else { 
       System.out.println("Please enter a valid name containing: ‘a-z’ or ‘A-Z’ lower or upper case"); 
      } 
     } while (!input.matches("[a-zA-Z]+")); 

используя спичек функцию строки может помочь вам достичь того, чего вы хотите

1

Вы можете показать пользователю всплывающее окно с ошибкой, чтобы он знал, что что-то не так с его/ее входом.

В другом заявлении, где вы печатаете сообщение вобще

JOptionPane.showMessageDialog(frame, 
"Please enter a valid name containing: ‘a-z’ or ‘A-Z’ lower or upper case.", 
"Input error", 
JOptionPane.ERROR_MESSAGE); 

return; 

For more information

Смежные вопросы