2016-09-16 57 views
0

我是一个初学者程序员(第一篇文章在这里!),我无法弄清楚如何用“do 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

您可以向用户显示错误弹出窗口,以便他知道他/她的输入有问题。

在else语句你在哪里打印消息只是做

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