在java中从控制台读取多行

时间:2016-11-22 23:43:27

标签: java java.util.scanner

我需要获得多行输入,这些输入将是我的类问题的控制台整数。到目前为止,我一直在使用扫描仪,但我没有解决方案。输入包含 n 行数。输入以整数开始,后跟一系列整数,重复多次。当用户输入0表示输入停止时。

例如

输入:

3
3 2 1
4
4 2 1 3
0

那么如何阅读这一系列的行并使用扫描仪对象将每一行存储为数组的元素呢?到目前为止,我已经尝试过:

 Scanner scan = new Scanner(System.in);
    //while(scan.nextInt() != 0)
    int counter = 0;
    String[] input = new String[10];

    while(scan.nextInt() != 0)
    {
        input[counter] = scan.nextLine();
        counter++;
    }
    System.out.println(Arrays.toString(input));

3 个答案:

答案 0 :(得分:1)

你可以使用scan.nextLine()获取每一行,然后通过在空格字符上拆分它来解析行中的整数。

答案 1 :(得分:1)

你需要2个循环:一个读取数量的外部循环,以及一个读取许多整数的内部循环。在两个循环结束时,您需要readLine()

Scanner scan = new Scanner(System.in);

for (int counter = scan.nextInt(); counter > 0; counter = scan.nextInt()) {
    scan.readLine(); // clears the newline from the input buffer after reading "counter"
    int[] input = IntStream.generate(scan::nextInt).limit(counter).toArray();
    scan.readLine(); // clears the newline from the input buffer after reading the ints
    System.out.println(Arrays.toString(input)); // do what you want with the array
}

这里为优雅(恕我直言),内循环用流实现。

答案 2 :(得分:0)

正如mWhitley所说,只需使用String#split分割空格字符上的输入行

这会将每行的整数保持为List并打印出来

Scanner scan = new Scanner(System.in);
ArrayList integers = new ArrayList();

while (!scan.nextLine().equals("0")) {
    for (String n : scan.nextLine().split(" ")) {
        integers.add(Integer.valueOf(n));
    }
}

System.out.println((Arrays.toString(integers.toArray())));