我为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');
答案 0 :(得分:2)
(从您描述的输出来看,您可能在Windows计算机上,对吗?)
read
返回输入流中的下一个字符。当您输入C或c,然后按Enter键时,您实际上已经输入了三个字符:
c
\r
\n
最后两个字符在一起是Windows表示新行的方式。由于要读取三个字符,因此在提示您再次输入任何内容之前,read
被调用了三次,因此println
也被调用了三次。
如果仅按Enter键,则只需输入两个字符:
\r
\n
所以打印了两行。
要解决此问题,您可以使用java.util.Scanner
。 Scanner
有一个不错的方法,叫做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"));