虽然不是(或等效)java

时间:2014-09-24 00:05:03

标签: java loops while-loop

我正在制作一个需要涉及一些错误检查的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
}

还是那种性质的东西?

4 个答案:

答案 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)$");