调试do-while循环出现多个语句

时间:2019-07-20 07:35:23

标签: java

我为o-while循环编写了一个代码,从用户那里获取输入,并检查循环退出是否等于“ c”或“ C”。如果输入的不是c或C,则输入do的内部语句会出现3次,如果我只是按输入而没有按下任何字符,那么block的内部语句会出现2次,为什么?谁能解释

int ch = 0;
        do {
            System.out.println("Press C or c to continue.");
            ch = System.in.read();
        }
        while(ch !='C' && ch !='c');

1 个答案:

答案 0 :(得分:2)

(从您描述的输出来看,您可能在Windows计算机上,对吗?)

read返回输入流中的下一个字符。当您输入C或c,然后按Enter键时,您实际上已经输入了三个字符:

  • c
  • \r
  • \n

最后两个字符在一起是Windows表示新行的方式。由于要读取三个字符,因此在提示您再次输入任何内容之前,read被调用了三次,因此println也被调用了三次。

如果仅按Enter键,则只需输入两个字符:

  • \r
  • \n

所以打印了两行。

要解决此问题,您可以使用java.util.ScannerScanner有一个不错的方法,叫做nextLine,它会返回用户输入的所有内容,直到到达换行符为止。

Scanner sc = new Scanner(System.in);
String line = "";
do {
    System.out.println("Press C or c to continue.");
    line = sc.nextLine();
}
while(!ch.equals("C") && !ch.equals("c"));