Java:扫描器行为调试
所以这里的问题是,当我再次尝试跑步时,它不会起任何作用。 它将运行一段时间,然后中断。我知道我没有使用currentTimeMillis是的,有人知道这里有什么问题吗。我不擅长编码,如果你有一些改进我代码的建议,请随时告诉我。 是的,我试着在网上找anwsers,但什么也没找到。抱歉英语不好
public static String list(ArrayList<String> lause2) {
Collections.shuffle(lause2);
String pleb = lause2.get(lause2.size() - 1);
return pleb;
}
public static void main(String[] args) throws Exception {
Scanner printer = new Scanner(System.in);
ArrayList<String> lause2 = new ArrayList<>();
ArrayList<Integer> keskiarvo = new ArrayList<>();
long start = System.currentTimeMillis();
long end = start + 10 * 6000;
int laskuri = 0;
boolean go = true;
boolean run = true;
System.out.println("Welcome to Typefaster");
System.out.println("Program will give you random words you will write them as fast as you can for an minute if you fail ones it's over Good luck!");
lause2.add("hello");
//Loads of different lause2.add("random");
lause2.add("vacation");
System.out.println(list(lause2));
while (System.currentTimeMillis() < end) {
laskuri++;
String something = list(lause2);
System.out.println("Write " + something);
String kirjoitus = printer.nextLine();
if (kirjoitus.equals(something)) {
System.out.println("yee");
} else {
break;
}
}
System.out.println("You wrote " + laskuri + " words");
keskiarvo.add(laskuri);
int laskuri2 = 0;
System.out.println("Run again?");
char again = printer.next().charAt(0);
if (again == 'y') {
run = true;
} else if (again == 'n') {
System.out.println("Byebye");
go = false;
}
long start2 = System.currentTimeMillis();
long end2 = start2 + 10*6000;
while (System.currentTimeMillis() < end2 && run) {
laskuri2++;
String something1 = list(lause2);
System.out.println("Write " + something1);
String kirjoitus1 = printer.nextLine();
if (kirjoitus1.equals(something1)) {
System.out.println("yee");
} else {
break;
}
System.out.println("You wrote " + laskuri2 + " words");
keskiarvo.add(laskuri2);
}
}
# 1 楼答案
如果你知道
Scanner
是如何工作的,答案相当简单。在第二次运行中,您有以下行:假设该方法现在等待用户进行一些输入。然后将其与第一次运行时进行比较,等等。显然,第二个循环执行
break
。为什么?你可以把System.out.println("Debug: " + kirjoitus1);
放在它的正前方,轻松地检查它。 你看,这个值是一个空文本,它不等于something1
,所以break
被执行为什么文本是空的,不等待用户输入?上次使用
Scanner
是在这一行:此时的方法
next
确实在等待用户输入但它只读取写入输入的第一个标记。其余的输入仍保留在Scanner
的内部缓冲区中。因此,在这个方法Scanner
表示之后,我们仍然有一些未读的输入,它将在下次调用nextLine()
时返回这些未读的内容所以你需要做的是清除
yes/no
之后的缓冲区。您只需在此处使用nextLine()
而不是next()
即可:更多信息请参见文档:api/.../Scanner.html