这是我第一次在此处发布信息,因此,如果其格式不正确,我深表歉意。我的应用程序旨在要求用户输入我的一个房间名称,该应用程序将输出有关该房间的信息。然后,它应该询问用户是否要继续。我希望它只能接受“ y”或“ n”。当它询问我是否要继续时,我输入的字母不是“ y”或“ n”,并且正确地要求我输入可接受的答案。但是,如果我确实输入“ y”或“ n”,则它的作用就好像我一次输入了一个不可接受的答案,然后执行了应做的事情。任何帮助都非常感谢。
package roomateapp;
import java.util.Scanner;
public class RoomateApp {
public static void main(String[] args) {
//Initialize scanner to take in roomate name
Scanner sc = new Scanner(System.in);
String cont = "y";
while (cont.equalsIgnoreCase("y")) {
//CODE HERE BUT NOT SHOWN
//Ask to continue
System.out.println("Would you like to continue? (y/n)");
cont = sc.next();
System.out.println();
if (!cont.equalsIgnoreCase("y") || !cont.equalsIgnoreCase("n")) {
while (!cont.equalsIgnoreCase("y") || !cont.equalsIgnoreCase("n")) {
System.out.println("Please enter 'y' or 'n'");
System.out.println("Would you like to continue? (y/n)");
cont = sc.next();
if (cont.equalsIgnoreCase("y") || cont.equalsIgnoreCase("n")) {
break;
}
}
} else {
}
System.out.println();
}
}
}
答案 0 :(得分:2)
如@shmosel在其评论中所述:
if (!cont.equalsIgnoreCase("y") || !cont.equalsIgnoreCase("n")) {
将始终为真-使用布尔逻辑,我们可以说它等同于
if (!(cont.equalsIgnoreCase("y") && cont.equalsIgnoreCase("n")))
这可能更清楚地表明它始终是真实的。
您可能想检查它是否不是 “ y”还是“ n”,您可以这样写:
if (!(cont.equalsIgnoreCase("y") || cont.equalsIgnoreCase("n")))
或等效地:
if (!cont.equalsIgnoreCase("y") && !cont.equalsIgnoreCase("n"))
如果您想了解更多有关上述原因的信息,请查看De Morgan's Laws上的Wikipedia页面(与这种特定的等效性有关),或者更普遍地查看Logical Equivalence上的页面
答案 1 :(得分:0)
为什么不检查自己是否拥有“ y”或“ n”,而不检查自己没有的东西?
我会将let clusters = [];
let markers = [];
for(i = 0; i < Top.length; i++){
clusters.push(Top[i]._childClusters);
}
for(x = 0; x < clusters.length; x++){
markers.push({x: clusters[x]._markers});
}
for(z = 0; z < markers.length; z++){
// do something with the marker.
}
初始化为cont
或其他一些标记值,然后在null
保持不变的情况下循环。一旦您在循环内确认用户给定的值是“ y”或“ n”,我就只为cont
分配一个值。
cont