我使用谷歌和本网站,但未能在以下代码中找到一小部分的深入解释:
// 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是如何工作的,我有点困惑。谢谢你的帮助。
答案 0 :(得分:0)
ch = (char)System.in.read();
在循环的每次迭代中将char
读入ch
。只要输入字符是新行(\n
)或换行符(\r
),循环就会继续。任何其他输入都会结束循环。