所以问题在于,当我再试一次时,它不会做任何事情。 它将运行一次然后休息。我知道我没有使用currentTimeMillis,任何人都知道这里的问题是什么。如果您有一些改进我的代码的建议,请随时告诉我,我不擅长编码。 是的,我试着在网上找到了,但我没有找到任何东西。抱歉英文不好!
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);
}
}
答案 0 :(得分:0)
如果你知道Scanner
是如何工作的,答案就相当容易。在第二轮中,你有这一行:
String kirjoitus1 = printer.nextLine();
您认为该方法现在等待用户进行一些输入。然后你比较它在第一次运行等。显然你的第二个循环执行break
。为什么?您可以通过将System.out.println("Debug: " + kirjoitus1);
放在其前面来轻松地进行检查。
您看,该值为空文本,不等于something1
,因此break
会被执行。
为什么文本为空而不等待用户输入?您对Scanner
的最后一次使用是在这一行:
char again = printer.next().charAt(0);
此时方法next
确实等待用户输入。 但它只会读取书面输入的第一个标记。其余输入保留在Scanner
的内部缓冲区中。因此,在此方法后Scanner
说我们仍有一些未读的输入,并且在下次调用nextLine()
时会返回此未读的内容。
所以你需要做的是在yes/no
之后清除缓冲区。您可以在此处使用nextLine()
代替next()
来执行此操作:
char again = printer.nextLine().charAt(0);
文档中的更多信息:api/.../Scanner.html