2011-11-01 93 views
0

好了,这里是我的代码:循环'忽略'输入?

public static void playAgain(Scanner in){ 
    System.out.print("Play again?: "); 
    String again=in.next(); 
    if (again.equalsIgnoreCase("y")){ 
     playerScore=0; 
     aiScore=0; 
     playAgain=true; 
     } 
    else if (again.equalsIgnoreCase("n")){ 
     playAgain=false; 
     } 
    else { 
     while (!again.equalsIgnoreCase("y") && !again.equalsIgnoreCase("n")){ 
      System.out.print("Invalid response. Please enter \"y\" or \"n\": "); 
      again=in.next(); 
      } 
     } 
    } 

出于某种原因,如果我输入了错误的变量,说“布格”,while循环打印错误信息,但由于某种原因,默认为“Y”,甚至如果我输入'n' - 例如,样品运行将是:

再次播放? boog

输入无效,请输入y或n。 ñ

-program尽管我输入正

我该如何解决这个问题再次扮演?这与订单有关吗?提前致谢!

+0

你的代码说'无效response',但屏幕的协议说,'无效input'这并不匹配。 。除此之外,我会直接使用'return playAgain'方法,而不是将它保存到一个字段变量中。一个类中的字段越少,就越容易理解。 –

+0

如果你想要一个替代方法,我编辑了我的答案 – AusCBloke

回答

3

这可能是因为您退出while循环后没有将playAgain设置为false。以前的值是playAgaintrue

我认为你需要考虑重构,以便while循环高于'y'和'n'if/else声明。这样一旦用户输入了一个有效值,总是会调用if/else。验证应该在方法的开始。

3

在最后else分支,从while循环获得有效的输入后,您没有设置playAgain变量,因此它保持whixhever看重它了 - 在这种情况下正确的。您必须根据输入进行设置。

4

我猜你正在使用一些全局变量playAgain来指示是否再次播放。我已经回到从功能的boolean但无论如何,我不认为playAgain被修改在最后else块:

else { 
     while (!again.equalsIgnoreCase("y") && !again.equalsIgnoreCase("n")){ 
      System.out.print("Invalid response. Please enter \"y\" or \"n\": "); 
      again=in.next(); 
      } 
     } 

也许你想在一个while循环整套if S,所以again会在包含“y”或“n”后处理?无论哪种方式,该功能的结构需要重新思考。

编辑:我的做法是沿着线的东西:

public static boolean playAgain(Scanner in){ 
    System.out.print("Play again?: "); 
    String again=in.next(); 

    while (!again.equalsIgnoreCase("y") && !again.equalsIgnoreCase("n")) { 
     System.out.print("Invalid response. Please enter \"y\" or \"n\": "); 
     again = in.next(); 
    } 

    if (again.equalsIgnoreCase("y")){ 
     playerScore = 0; 
     aiScore = 0; 
     return true; 
    } 

    // there are only two valid options, so to get here it must be "n" 
    return false; 
} 
+0

我有一个类似的问题,并通过谷歌发现这一点。谢谢@AusCBloke。+1 – IRGeekSauce

0

我所看到的,你的程序是有缺陷的。

  1. if-else应该在另一个while循环中(例如无限循环或在again ==n的情况下退出)。所以每次你输入scanner.next()元素时,再次播放逻辑将被执行。这里
  2. while循环执行的代码和工作正常,因为ü没有得到警告“无效的输入,请输入y或n。”再次。

所以again的值是“n”,因此逻辑退出了while循环。所以检查playAgain是否设置为true

0

不良流量。 你应该做这样的事情(对任何错误对不起,这是精心输入我的手机上:

public static void playAgain(Scanner in){ 
    System.out.print("Play again?: "); 
     while (true) { 
     String again=in.next(); 
     if (again.equalsIgnoreCase("y")){ 
      playerScore=0; 
      aiScore=0; 
      playAgain=true; 
       break; 
     } else if (again.equalsIgnoreCase("n")){ 
      playAgain=false; 
      break; 
     } else { 
      // bad input, so allow to loop again 
      System.out.print("Invalid input! Please enter y or n"); 
     } 
     } 
} 
+0

啊废话它删除了我的换行符...对不起,关于该 – jli

+1

修复它为你交配...尽快因为有人批准我吨。 – AusCBloke

+0

谢谢。 *希望我买了一个带有硬键盘的手机* – jli