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

Java 调试do while循环时出现多个语句,java,Java,我为o-while循环编写了一个代码,从用户那里获取一个输入,并检查它是否等于“c”或“c”即循环的出口。如果输入c或c以外的输入,do块的内部语句出现3次,如果我只按enter press而不按任何字符,则do块的内部语句出现2次,为什么??有人能解释一下吗 int ch = 0; do { System.out.println("Press C or c to continue."); ch = System.in.read()

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

int ch = 0;
        do {
            System.out.println("Press C or c to continue.");
            ch = System.in.read();
        }
        while(ch !='C' && ch !='c');
(从您描述的输出判断,您可能在Windows计算机上,对吗?)

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

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

如果只按enter键,则只输入了两个字符:

  • \r
  • \n
所以打印了两行

要解决此问题,可以使用
Scanner
有一个很好的方法,名为,它返回用户输入的所有内容,直到到达新行字符

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"));

因为在没有字符的情况下按enter键仍会读取字符,即换行符(
\n
)。