【问题标题】:How to read array of integers from the standard input in Java?如何从 Java 的标准输入中读取整数数组?
【发布时间】:2014-08-22 10:13:08
【问题描述】:

在标准输入的一行中,我有 3 种类型的整数:第一个整数是 id,第二个整数是 N - 某个数字,然后是 N 个整数,由我要存储的单个空格分隔数组或数组列表。如何使用 BufferedReader 做到这一点?我有以下代码:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] line = br.readLine().split(" ");
int ID = Integer.parseInt(line[0]);
int N = Integer.parseInt(line[1]);

我的问题是有什么优雅的方式来读取该行的其余部分并将其存储到数组中?

【问题讨论】:

  • 后面的N个整数是怎么分开的?
  • 后面的N个整数只用一个空格“”隔开
  • split 与限制性模式(正好一个空格)一起使用需要非常准确地准备好输入。如果您继续使用这种方法,建议在一系列空白处进行拆分 ("\\s+")。

标签: java arrays bufferedreader


【解决方案1】:

使用Scanner 和方法hasNextInt()

Scanner scanner = new Scanner(System.in);

while (scanner.hasNext()) {

     if (scanner.hasNextInt()) {
        arr[i]=scanner.nextInt();
        i++;
     }
  }

【讨论】:

  • 这是我发布的通用方法。 OP没有具体提到他的问题。如果文件包含所有整数@laune,那么读取到文件末尾有什么问题
  • OP 已明确要求如何读取“N - 某个数字,然后是 N 个整数”以及如何将它们存储到数组或列表中。他的“标准输入的一行”不是他的唯一行。
【解决方案2】:

如何使用 BufferedReader 做到这一点?

您已经读取/拆分了该行,因此您可以遍历其余输入的整数并将它们添加到数组中:

int[] array = new int[N];  // rest of the input

assert line.length + 2 == N;  // or some other equivalent check

for (int i = 0; i < N; i++)
    array[i] = Integer.parseInt(line[i + 2]);

这还可以让您处理循环中的错误(如果您认为有必要,我将把这部分留给您)。

【讨论】:

  • 建议检查String[] line中是否有足够的元素。
  • @laune 当然,我将其纳入答案中。
猜你喜欢
  • 2011-01-31
  • 2019-07-26
  • 2018-04-28
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 2015-05-28
相关资源
最近更新 更多