有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    如果你知道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