如何在Java中以单行整数作为输入?

时间:2019-10-20 15:40:16

标签: java

我正在尝试将以下行用作Java中的输入,但未获得所需的输出。我希望所有这些整数都在数组列表中。

输入:

  • 2(测试用例)
  • 5(第一个测试用例数组的大小)
  • 1 2 3 5 4(第一个测试用例数组中的元素)
  • 4(第二个测试用例数组的大小)
  • 66 45 778 51(第二个测试用例数组中的元素)

代码:

import java.util.*;
import java.lang.*;
public class Main
{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //System.out.println("Hello World");
        int tc = sc.nextInt();
        for(int i = 0; i < tc; i++){
            ArrayList<Integer> list = new ArrayList<Integer>();
            int t = sc.nextInt();
            String line = sc.next();
            String[] arr = line.split(" ");
            for(int j = 0; j < t; j++)   
                list.add(Integer.parseInt(arr[j]));
            System.out.print(list);
        }
    }
}

输出

1
5
1 2 3 4 5
[1]

4 个答案:

答案 0 :(得分:0)

使用sc.nextLine()。它返回一个String,但是通过在每个空格后分​​割输入,您将得到一个String[],其中包含所有整数。如果您将它们循环并转换为int,则可以将它们添加到列表中。
这是我将如何操作的示例:

import java.util.ArrayList;
import java.util.Scanner;

class Main {

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("How many numbers?");
    int tc = Integer.valueOf(sc.nextLine());

    for(int i = 0; i < tc; i++) {
        System.out.println("Next number");
        ArrayList<Integer> list = new ArrayList<Integer>();
        String line = sc.nextLine();

        String[] arr = line.split("\\s");
        for(int j = 0; j < arr.length; j++){
            list.add(Integer.parseInt(arr[j]));
        }
        System.out.print(list);
    }

    sc.close();
  }

}

答案 1 :(得分:0)

我不太清楚您的问题是什么,但我想您只是对读取一串数字(1 2 3 4 5 4)感兴趣并将其转换为数组[1,2,3,4,5,4 ]。

String input= "1 2 3 4 5 4";
String[] stringList = input.split(" ");
int[] integerList = new int[stringList .length()];
for(int i = 0; i < listOfS.length(); i++) {
    integerList[i] = Integer.parserInt(stringList[i]);
}

首先,您必须使用input.split(“”)将String字符串拆分为其元素。这将在每个空格符号处拆分String输入。 然后,您必须将String []转换为int []。这是通过迭代string []并使用Integer.parseInt()将其内容解析为整数来完成的。

答案 2 :(得分:0)

这是您想要的吗?


    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;

    public class Main {
       public static void main(String[] args) {
          Scanner sc = new Scanner(System.in);
          int tc = sc.nextInt();
          for (int i = 0; i < tc; i++) {
             List<Integer> list = new ArrayList<>();
             int nElements = sc.nextInt();
             while (nElements-- > 0) {
                list.add(sc.nextInt());
             }
             System.out.print(list);
          }
       }
    }

答案 3 :(得分:0)

这是使用Stream进行数字处理的简单解决方案:

List<Integer> list = new ArrayList<>();

Scanner scanner = new Scanner(System.in);
int testCases = Integer.parseInt(scanner.nextLine());

for (int i = 0; i < testCases; i++) {
    scanner.nextLine(); // skip "size" line as we don't use it in this solution
    Arrays.stream(scanner.nextLine().trim().split("\\s+"))
            .map(Integer::parseInt)
            .forEach(list::add);
}

list.forEach(e -> System.out.printf("%d ", e));

输入

2
4
  2 3   4 5   
2
 99    77

输出

2 3 4 5 99 77 

说明

  • Arrays.stream(...)-根据提供的数组的元素创建一个stream
  • scanner.nextLine().trim().split("\\s+")-从Scannertrim开头和结尾的空白处读取一行,split乘以一个或多个空白处将其插入{{ 1}}
  • String[]-将每个.map(Integer::parseInt)元素转换为String
  • Integer-将每个.forEach(list::add)元素添加到Integer