【发布时间】:2016-06-05 15:43:33
【问题描述】:
class Noob1 {
public static void main(String args[])
throws java.io.IOException{
char ch, answer;
answer = 'g';
do {
System.out.println("Guess from A-L:");
ch = (char) System.in.read();
if(ch == answer){
System.out.println("Congratz!");
} else System.out.println("Try again!");
} while (ch != answer);
}
}
输出是这样的:
Guess from A-L:
a
Try again!
Guess from A-L:
Try again! // this is where intuitively it should ask for input again
Guess from A-L:
Try again!
Guess from A-L:
g // input is skipped a few times
Congratz!
我不知道为什么,我正在阅读一本面向初学者的书,并且应该涵盖所有内容,我错过了什么?
在循环末尾添加下面的代码确认它正在循环,但输入被某种方式跳过。
i++;
System.out.println(i);
所以我使用它来工作:
import java.io.*;
class Noob1
{
public static void main(String args[]) throws java.io.IOException
{
char ch, answer;
String tmp;
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
answer = 'g';
do
{
System.out.println("Guess character followed by ENTER:");
tmp = bufferedReader.readLine();
ch = tmp.charAt(0); // only first char is considered
if (ch == answer)
System.out.println("Gratz! the answer was: " + ch + "!");
else
System.out.println("Nope, try again..");
} while (ch != answer);
}
}
格式仍然很糟糕吗?
【问题讨论】:
-
从一开始就养成使用一致缩进和支撑的习惯很有用。问题中的代码可能需要进行一些清理。
-
@Tunaki:OP 没有使用
Scanner。但很可能还有一个早期版本的这个问题直接使用System.in。 -
@T.J.Crowder 你是对的......我很傻。感谢您指出了这一点。这会更合适stackoverflow.com/questions/27239265/whats-wrong-with-for-loop 或stackoverflow.com/questions/15296637/…
-
@Tunaki:很棒的发现,我用了第一个。