相关疑难解决方法(0)

如何清除Java中的扫描程序缓冲区?

我有这样的事情:

    Scanner in=new Scanner(System.in);
    int rounds = 0;
    while (rounds < 1 || rounds > 3) {
        System.out.print("How many rounds? ");
        if (in.hasNextInt()) {
            rounds = in.nextInt();
        } else {
            System.out.println("Invalid input. Please try again.");
            System.out.println();
        }
        // Clear buffer
    }
    System.out.print(rounds+" rounds.");
Run Code Online (Sandbox Code Playgroud)

我该如何清除缓冲区?

编辑:我尝试了以下,但由于某些原因它不起作用:

while(in.hasNext())
    in.next();
Run Code Online (Sandbox Code Playgroud)

java io

33
推荐指数
5
解决办法
16万
查看次数

为什么我们不使用它后关闭`System.out`流?

我只是想知道,我们通常在最后关闭流,但为什么我们不关闭System.outPrintStream System.out.close()

java stream printstream system.out

20
推荐指数
3
解决办法
2811
查看次数

禁用System.err

有没有办法设置流System.err所以写入它的所有内容都被忽略?(即丢弃未输出)

java

18
推荐指数
3
解决办法
6354
查看次数

为什么在使用scaner.close()之后不能仅仅创建另一个扫描器对象?

使用scanner.close()方法后,无法打开其他扫描仪。我已经在Google上搜索了我的问题,仅找到提供解决方案的人。我只想首先理解为什么这是一个问题。谁能解释为什么?

import java.util.Scanner;

public class Main {

    public static Scanner scan = new Scanner(System.in);

    public static void main(String[] args) {
        scan.close();

        Scanner scan = new Scanner(System.in);

        System.out.println(scan.next());  //NoSuchElementException
    }

}
Run Code Online (Sandbox Code Playgroud)

我知道一次打开多个扫描器会导致outOfMemoryError,所以我想为什么不将其作为可以从中调用方法的单例实用工具类?此类会在每次使用时打开和关闭扫描仪,因此流无需保持打开状态。

public class Main {

    public static void main(String[] args) {
        LinkedList<Scanner> list = new LinkedList<>();
        while(true) {
            list.add(new Scanner(System.in)); //OutOfMemoryError
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这回到了我的问题的根源,如果我们都能理解为什么扫描器类以这种方式工作,也许我们可以提出一个解决方案?

java java.util.scanner nosuchelementexception

0
推荐指数
1
解决办法
41
查看次数