if-else循环在另一个while循环中的do while循环中

时间:2014-11-17 17:37:38

标签: java loops if-statement do-while

当输入“y”或“Y”时,我希望代码从第一个System.out.print("Y/y or N/n: ");开始提示do,但代码会提示System.out.print("bad answer, try again: ");,而我除了y,Y,n,N之外,只需要char。

接下来唯一的代码是在System.exit(0);之后输入'n'或'N'

import java.util.Scanner;
public class Test
{
   public static void main(String[] args)
   {
      Scanner kb = new Scanner(System.in);
      char ch;
      do
      {
         System.out.print("Y/y or N/n: ");
         do
         {
            ch = kb.nextLine().charAt(0);
            if (ch == 'n' || ch == 'N')
            {
               System.exit(0);
            }
            else if (ch != 'y' || ch != 'Y' || ch != 'n' || ch != 'N');
            {
               System.out.print("bad answer, try again: ");
            }

         }
         while (ch != 'y' || ch != 'Y' || ch != 'n' || ch != 'N');
      }   
      while (ch == 'y' || ch == 'Y');
   }
}

2 个答案:

答案 0 :(得分:2)

因为你使用的是OR而不是AND,所以这种情况总是如此:

else if (ch != 'y' || ch != 'Y' || ch != 'n' || ch != 'N')
{
    System.out.print("bad answer, try again: ");
}

顺便说一句,你可以简化这个以便有一个do-while。如果答案很糟糕,那就继续进行外循环的下一次迭代。

答案 1 :(得分:1)

删除分号并检查ch并取出AND。 代码可能是这样的:

else if (ch != 'y' && ch != 'Y' && ch != 'n' && ch != 'N')
{
       System.out.print("bad answer, try again: ");
}

删除分号并检查ch并取OR,最后取NOT。 代码可能是这样的:

 else if (!(ch == 'y' || ch == 'Y' || ch == 'n' || ch == 'N'))
 {
       System.out.print("bad answer, try again: ");
  }