Java 带do while循环的托架返回/管线进给移除

Java 带do while循环的托架返回/管线进给移除,java,do-while,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

伙计们

我使用了谷歌和这个网站,但找不到以下代码中一小部分的深入解释:

// 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-while循环至少运行一次。|意味着它们都必须为false才能让do while循环停止。这是按什么顺序进行的?所以当我按下一个字母时,它首先得到回车符和换行符,两者都是真的,所以它再次运行system.in.read,但是它运行了两次,并且它已经有了我的字母,所以当system.in.read由于循环再次运行时,它会再次生成回车符和换行符,还是不?所以在我看来,它变成了一个无限循环,但事实并非如此。我试着在没有这个的情况下运行程序,当我按下一个字母时,它会打印两个问题,两次。为什么?我对这个循环和这个cr/nl的删除是如何工作的有点困惑。感谢您的帮助。

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

阅读java操作符教程,如果仍然不理解,请提问,而不是相反。如果你想知道为什么你的问题被否决了。我理解接线员的意思,但我不理解顺序。例如,首先我键入H,然后按enter键,并生成一个换行符。所以,虽然条件仍然为真,它会再次运行System.in.read,但我已经输入了一个H,所以它应该转到else部分。或者,如果有新字符留下,它可能只会读第二遍?在来到这里之前,我在教程和谷歌上搜索了至少30分钟。同样,我理解|操作符是如何工作的,只是我不理解如果它再次返回System.in.read.Thank会发生什么。我知道任何其他输入\n或\r结束循环。但我输入H,然后在我按下enter键和换行符后,它会自动生成一个enter。然后它在while循环中运行true,并返回到system.in.read,但是system.in.read会等待新字符吗?或者它存储H和循环直到\n和\r消失还是什么?我不知道;我真的不明白这个顺序。因为在我从程序中删除这个循环后,它会打印问题两次,所以我测试了它。@Simon System.in返回一个InputStream。InputStream.read的Javadoc表示,
此方法会一直阻塞,直到输入数据可用、检测到流结束或抛出异常为止。因此,是的,如果没有可用的输入,它将等待一个新字符。因此,它运行一次,然后我选择键入一个H。我在这之后输入一个enter,因此while将接收enter和换行符。然后循环迭代并等待另一个字符。但当我运行程序时,它不会立即要求新角色,但会转到“其他”部分并打印“对不起,你错了,我太低了”,然后重试。我不明白,抱歉,但我还是不明白do-while循环如何防止程序立即进入抱歉的you's Error部分。
do {ch = (char) System.in.read(); 
} while(ch == '\n' | ch == '\r');