使用 Java 8 高效读取竞争性编程输入

10 Sept 2024 | 4 分钟阅读

众所周知,在解决任何编程竞赛问题时,第一步就是收集输入或读取输入。我们经常犯的一个错误是花费过多的时间编写代码和编译。在 Java 中,建议使用 BufferedReader 而不是 Scanner 来接受用户输入。为什么?这在我们之前的文章中已经讨论过。 (另外,java.util.Scanner 的相关问题也已提供) 然而,为了更好地理解,本文将深入探讨这两种实现方式。使用 Scanner 类读取输入的方法 使用 BufferedReader 类读取输入的方法 使用流辅助的 BufferedReader 类读取输入的方法 (更优化) 现在,让我们通过提供简洁的 Java 程序和理解自定义输入生成的输出,深入讨论每种读取方式。

上面的例子说明了大多数程序员在解决编程竞赛问题时使用的最常见的方法。但是,如果我们能稍微改进我们的代码,使其更快、更可靠呢?方法 2:简单的 BufferedReader 输入读取 java.io.BufferedReader 类不提供读取原始数据输入的任何方法。Java.io.BufferedReader 类从字符输入流读取文本,缓冲字符,从而有效地读取字符序列。尽管它会抛出一个称为 IOException 的检查异常。让我们看看如何处理这个异常并从用户那里读取输入。请看如下自定义输入:输入:4 5.6 1 2 3 4 5 示例

上面的例子说明了在解决编程竞赛问题时读取数据的另一种常见方法。那么,这足够了吗?如果我们能进一步改进它呢?是的。这是可能的。敬请关注。

方法 3:使用流增强的 BufferedReader 读取分隔数据的增强方法 在前面的示例中,我们看到在读取空格分隔数据时,我们首先将其存储在字符串数组中,然后遍历元素,再使用 Java 类型转换将其转换为所需的数据类型。如何用一行代码就能实现呢?是的。Java 8 的流库提供了各种函数,使其简单且优化。请看如下自定义输入:

输入:34 55 78 43 78 43 22 94 67 96 32 79 6 33