使用do-while循环移除回车/换行

时间:2015-05-25 11:43:59

标签: java do-while

哟伙计们,

我使用谷歌和本网站,但未能在以下代码中找到一小部分的深入解释:

// Guess the letter game, 4th version.
class Guess4 {
 public static void main(String args[])
 throws java.io.IOException {
  char ch, answer = 'K';

do {
 System.out.println("I'm thinking of a letter between A and Z.");
 System.out.print("Can you guess it: ");
 // read a letter, but skip cr/lf
 do {
  ch = (char) System.in.read(); // get a char
 } while(ch == '\n' | ch == '\r');

if(ch == answer) System.out.println("** Right **");
else {
 System.out.print("...Sorry, you're ");
 if(ch < answer) System.out.println("too low");
 else System.out.println("too high");
 System.out.println("Try again!\n");
   }
  } while(answer != ch);
 }
}  

所以我的问题是关于这一部分:

do {ch = (char) System.in.read(); 
} while(ch == '\n' | ch == '\r');

有人可以深入解释这是如何运作的吗?我知道它首先从键盘上读取一个字符,因为do-while循环至少运行一次。 |意味着它们都必须是假的才能让do-while循环停止。这有什么作用?因此,当我按下一个字母时,它首先得到一个回车和换行,两者都是真的,所以它再次运行system.in.read,但是它运行了两次并且它已经有了我的信,所以当system.in因为循环,.read再次运行,它会再次产生回车和换行吗?所以在我看来它变成了一个无限循环,但事实并非如此。我尝试在没有这个的情况下运行该程序,当我按下一个字母时,它会打印两个问题,两次。为什么?关于这个循环和删除这个cr / nl是如何工作的,我有点困惑。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

ch = (char)System.in.read();在循环的每次迭代中将char读入ch。只要输入字符是新行(\n)或换行符(\r),循环就会继续。任何其他输入都会结束循环。