我正在制作一个需要涉及一些错误检查的Java程序。我可以阻止用户输入这样的错误数字输入(假设已经创建了input
扫描程序):
while (n == 0){
System.out.println("Can't use 0 as a denominator! Please enter a real, nonzero number");
n = input.nextInt();
}
但是如何阻止用户输入无效字符串?我无法使用!=
,因为字符串只能与string.equals()
方法进行比较,对吧?那么,有一段时间没有循环吗?即:
while !(string.equals("y") || string.equals("n")){
//here have code
}
还是那种性质的东西?
答案 0 :(得分:5)
虽然没有while-not循环,但你总是可以反转条件:
while (!(string.equals("y") || string.equals("n"))){
这是读取,“虽然字符串不等于”y“或”n“”。
您也可以将DeMorgan的身份重写为:
while (!(string.equals("y")) && !(string.equals("n"))){
有点清楚,因为“虽然字符串不等于”y“并且不等于”n“”。
答案 1 :(得分:4)
没有while-not
指令,但您可以简单地否定正常while
循环中的条件。试试这个:
while (!string.equals("y") && !string.equals("n"))
或者甚至更好,以防止字符串为null
和/或它处于不同情况的情况:
while (!"y".equalsIgnoreCase(string) && !"n".equalsIgnoreCase(string))
答案 2 :(得分:2)
你几乎得到它,只需改变你!
的位置
像这样:
while (!(string.equals("y") || string.equals("n")))
答案 3 :(得分:1)
为什么不尝试正则表达式?
Scanner sc = new Scanner(System.in);
String string = sc.nextLine();
while (!string.matches("(?i)^(?:y|n|yes|no)$"))
{
System.out.println("Invalid input...");
string = sc.nextLine();
}
boolean answer = string.matches("(?i)^(?:y|yes)$");