当前位置: 首页 > 知识库问答 >
问题:

为什么扫描器在从输入读取时比BufferedReader慢?

阎德义
2023-03-14

我明白扫描仪有什么好处,也明白什么时候使用扫描仪,什么时候使用Bufferedreader。我读到了一个不同的,但在一些类似的问题扫描器vs.BufferedReader

    null
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] s = br.readLine().split(" "); 
        int numberOfLines = Integer.parseInt(s[0]);
        int divideNumber = Integer.parseInt(s[1]);
        int count = 0;

        for (int i = 0; i < numberOfLines; i++) {
            String number = br.readLine();
            if (number.length() < 11) {
                int num = Integer.parseInt(number);
                if (num % divideNumber == 0) {
                    count++;
                }
            } 
        }
        System.out.println(count);
    }
}

共有1个答案

越信鸥
2023-03-14

在Scanner vs.BufferedReader中可以找到一些投票结果很高的提示为什么Scanner更慢。

这种性能差异在某些情况下可能是至关重要的,比如竞争编程。因此,Codeforces有许多关于自定义更快输入解析器的帖子,比如here、here(带基准测试)和here。

 类似资料:
  • 问题内容: 我了解Scanner的优点,以及何时使用Scanner和BufferedReader。我读了一个不同的问题,但在一些类似的问题中,它的问题是Scannervs. BufferedReader 当我从输入中读取内容时,为什么Scanner这么慢? 我认为这与Scanner中有一个小的缓冲区有关,但是在这里我迷路了。最初的问题来自 Codechef,但我对该解决方案不感兴趣。 这是具有给定

  • 问题内容: 我正在尝试做的是拥有多个具有不同变量的输入。每个变量将是不同方程式的一部分。我正在寻找一种方法来做,我想我有一个主意。我只想知道这是否合法,也许还有更好的方法。 问题答案: 如果每个输入都问相同的问题,则应使用循环和输入数组: 或者如Chip所建议的,您可以从一行中解析输入: 您在正确的轨道上,所做的工作正常。这只是一种更好,更灵活的处理方式。

  • 问题内容: 据我所知,在Java中从文件读取基于字符的数据的两种最常见的方法是使用或。我也知道通过使用缓冲区来避免物理磁盘操作来有效地读取文件。我的问题是: 是否执行以及? 为什么你会选择在反之亦然? 问题答案: 用于从流的内容中解析令牌,而只是读取流,并且不执行任何特殊的解析。 实际上,你可以将传递给作为要解析的字符源。

  • 因此,我是一个新的Java程序员,我正试图弄清楚为什么一段代码不能工作。我遇到的问题是“String interests=input.nextLine();”这一行,它跳过了用户的输入并跳转到下一个System.out,所以它只显示“Your Profile...”。在允许用户输入任何数据之前。抱歉,如果这是一个愚蠢的问题,我是很新的!

  • 我想从静态块中的用户那里读取数据,并需要检查那里的一些条件,但当我试图调用nextInt()时,它会导致一些错误 线程“main”java.lang.ExceptioninInitializerError中出现异常 由:java.util.scanner.throwfor(scanner.java:862),java.util.scanner.next(Scanner.java:1485),jav

  • 有人问我一个关于求两个数之间的公约数的问题。我能够使用“埃拉托色尼筛”找出逻辑方法,我正在运行我的代码。但是我的代码给出了一个意想不到的输出,它能够计算出no。指两个数之间的公约数。对于第一个输入,但对于其余的输入,它以某种方式继续与前一个值“内部循环j”,在该值处,它在第一个测试用例中停止;对于其他测试用例。 逻辑方法-->如果一个素数不。是给定两个NO的因子。然后,我们将检查每一个素数的倍数。