有 Java 编程相关的问题?

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

任何使用系统的替代方案。在用Gradle构建的java控制台应用程序中?

我有一个基本的控制台应用程序,我只是尝试在while循环中使用一个简单的扫描仪来捕获用户输入。我已经试着把standardInput = System.in放在build.gradle中,但是我的程序在应该等待输入的时候没有阻塞

while (stillWriting) {
        System.out.println(
                        "Press 1 to write something,\n" +
                        "Press 2 to erase something,\n" +
                        "Press 3 to exit."
        );
        //if you select 1, it goes into the case, but does not block
        //then ends up here again.
        int userSelection = scanner.nextInt();
        switch (userSelection) {
            case 1:
                System.out.println("Enter text to be written: ");
                 //vvvvvv should block here but doesn't. vvvvvv
                String textToWrite = scanner.nextLine();
                paper = pencil.write(paper, textToWrite);
                break;
            case 2:
                //some code
                break;
            case 3:
                stillWriting = false;
                break;
            default:
                System.out.println(userSelection + " is not valid.");
                break;
        }
    }

我是否可以使用任何替代品或JAR使其正确阻塞并实际等待输入


共 (2) 个答案

  1. # 1 楼答案

    事实证明,在每种情况下,如果您想获取输入,只要将一个新的Scanner()重新分配给Scanner变量,它就会正确地阻塞

    尽管如此,他还是不会选择一个新角色

  2. # 2 楼答案

    您必须使用用户输入的<Enter>来做出选择,否则它将(立即)被您的String textToWrite = scanner.nextLine();使用:

    [...]
    
    int userSelection = scanner.nextInt();
    scanner.nextLine();   // <  consume the <enter>
    
    switch (userSelection) {
    
    [...]