Java If/else嵌套被跳过并转到下一个else语句

Java If/else嵌套被跳过并转到下一个else语句,java,Java,在if/else语句中,我有两个if/else语句和两个嵌套的if/else语句。当我运行程序并输入“s”时,它将跳过第一个if语句,然后跳到第二个if语句,再跳回到while循环,并且永远不会到达嵌套的if/else语句。现在我打算让程序做的是,当我输入“s”时,它运行第一个if语句,理论上,它应该运行嵌套的else语句,输出结果是“你不能那样做”。当我输入正确的输入“n”时,程序工作。有什么建议吗 while(!input.equals("quit")) { System.out.

在if/else语句中,我有两个if/else语句和两个嵌套的if/else语句。当我运行程序并输入“s”时,它将跳过第一个if语句,然后跳到第二个if语句,再跳回到while循环,并且永远不会到达嵌套的if/else语句。现在我打算让程序做的是,当我输入“s”时,它运行第一个if语句,理论上,它应该运行嵌套的else语句,输出结果是“你不能那样做”。当我输入正确的输入“n”时,程序工作。有什么建议吗

while(!input.equals("quit")) {
     System.out.println(map.rooms[row][col].name);
     System.out.print("<");
     input = scan.nextLine().toLowerCase();
     if (input.equals("n")) {      
         if (map.rooms[row][col].isValidExit("n"))
             row--;
         else
             System.out.println("There is no exit that way");
     } else if (input.equals("e")) {
         if (map.rooms[row][col].isValidExit("e"))
             row++;
         else
             System.out.println("There is no exit that way");
     }
}
while(!input.equals(“quit”)){
System.out.println(map.rooms[row][col].name);

System.out.print(“很明显,当您的输入为“s”时,程序将永远不会到达嵌套的if/else语句,因为您的主if-else语句正在处理“n”和“e”两种情况,如果希望它处理其他情况并显示消息“没有那样的出口”,那么您的代码应该如下所示:

while(!input.equals("quit")) {
 System.out.println(map.rooms[row][col].name);
 System.out.print("<");
 input = scan.nextLine().toLowerCase();
 if (input.equals("n")) {      
     if (map.rooms[row][col].isValidExit("n"))
         row--;
     else
         System.out.println("There is no exit that way");
 } else if (input.equals("e")) {
     if (map.rooms[row][col].isValidExit("e"))
         row++;
     else
         System.out.println("There is no exit that way");
 }
 else
 {
     // you should process other cases here like "s"
     System.out.println("There is no exit that way");
 }
}
while(!input.equals(“quit”)){
System.out.println(map.rooms[row][col].name);

System.out.print(“我认为您误解了条件分支的工作方式

当你说

if (input.equals("n")
{
    System.out.println("go north");
}  
else if (input.equals("e")
{
    System.out.println("go east");
}
它将检查输入是否等于n,如果不等于n,它将检查下一个分支。即使计算结果为false,它也不会进入该分支,因为否则条件分支的第一点是什么?您不妨将其取出

我认为你的“预期”逻辑也没有意义:如果用户点击“s”,为什么程序会检查north是否可以通过?从玩家的角度来看,你的设计似乎没有意义

如果您想为“s”添加一个案例,您可以在用户输入“s”时将其添加为另一个分支


也许您忘了为
else if(input.equals(“w”)
else if(input.equals(“s”)添加块
?应该是
行+++
不应该是
列+++
?还是e应该是s?因为当用户想要东移时,他会去down@vandale是的,这是正确的,我忘了在语法中更改它。谢谢。我认为你给我看的东西解决了这个问题,但是在测试之后,它忽略了嵌套的else的要点语句。我希望它运行第一个if,当它不是“n”时,我希望它运行嵌套的if/else语句,该语句应打印“没有那样的出口”.在你的代码中,你不允许这样做,因为当它不是'n'时,它将检查它是否是'e',然后它将永远不会检查其他类似's'的内容,这就是为什么我建议为其他州创建另一个其他州,请查看我答案的更新。如果你将“e”更改为“s”,它将正常工作,如果是这种情况,您的问题的答案将是下面的答案。我理解。尽管我添加了您提到的其他进程,但它并不能解决问题。我创建了嵌套的if/else语句,以便不会得到NullPointerException。这是一个包含4x4个单元格的二维数组。并非所有单元格都已填充。因此当我执行你告诉我的过程时,它确实在某种程度上解决了问题,但不是完全解决了问题。原因是,当你在程序中开始时,右边或“e”没有单元格。因此,在开始时,如果输入“e”,你将得到一个nullpointerexception错误。有没有办法对其进行结构化,以便我可以验证我的退出?
else if (input.equals("s"))
{
    System.out.println("go south");
}