Java:扫描器行为调试
所以这里的问题是,当我再次尝试跑步时,它不会起任何作用。 它将运行一段时间,然后中断。我知道我没有使用currentTimeMillis是的,有人知道这里有什么问题吗。我不擅长编码,如果你有一些改进我代码的建议,请随时告诉我。 是的,我试着在网上找anwsers,但什么也没找到。对不起,英语不好Java:扫描器行为调试,java,debugging,Java,Debugging,所以这里的问题是,当我再次尝试跑步时,它不会起任何作用。 它将运行一段时间,然后中断。我知道我没有使用currentTimeMillis是的,有人知道这里有什么问题吗。我不擅长编码,如果你有一些改进我代码的建议,请随时告诉我。 是的,我试着在网上找anwsers,但什么也没找到。对不起,英语不好 public static String list(ArrayList<String> lause2) { Collections.shuffle(lause2); Stri
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);
}
}
公共静态字符串列表(ArrayList lause2){
收藏。洗牌(lause2);
字符串pleb=lause2.get(lause2.size()-1);
返回pleb;
}
公共静态void main(字符串[]args)引发异常{
扫描仪打印机=新扫描仪(System.in);
ArrayList lause2=新的ArrayList();
ArrayList keskiarvo=新的ArrayList();
长启动=System.currentTimeMillis();
长端=起点+10*6000;
int-laskuri=0;
布尔go=true;
布尔运行=真;
System.out.println(“欢迎使用打字更快”);
println(“程序会给你们随机的单词,你们会尽可能快地写出它们,若你们不及格,那个就结束了,祝你们好运!”);
lause2.添加(“你好”);
//不同lause2的负载。添加(“随机”);
lause2.添加(“假期”);
系统输出打印LN(列表(lause2));
while(System.currentTimeMillis()
如果您知道扫描仪的工作原理,那么答案相当简单。在第二次运行中,您有以下行:
String kirjoitus1 = printer.nextLine();
char again = printer.next().charAt(0);
假设该方法现在等待用户进行一些输入。然后将其与第一次运行时进行比较等。显然,第二个循环执行中断
。为什么?您可以通过放入System.out.println(“调试:+kirjoitus1”)来轻松检查这一点代码>就在它前面。
你看,这个值是一个空文本,它不等于something1
,因此执行break
为什么文本是空的,不等待用户输入?您上次使用的扫描仪
如下:
String kirjoitus1 = printer.nextLine();
char again = printer.next().charAt(0);
此时,方法next
确实在等待用户输入但是它只读取写入输入的第一个标记。其余输入保留在扫描仪的内部缓冲区中。因此,在这个方法Scanner
说之后,我们还有一些未读的输入,下次调用nextLine()
时,它会返回这些未读的内容
因此,您需要做的是在yes/no
之后清除缓冲区。您只需在此处使用nextLine()
而不是next()
即可:
char again = printer.nextLine().charAt(0);
文档中的更多信息:标题有点误导,因为您将错误的源代码识别为代码错误。