Java读取n行整数的k行

时间:2017-06-22 21:05:59

标签: java

我有一个输入(控制台输入,而不是文件)。第一行包含3个整数:a,b,c。然后下一个a + c行包含由空格分隔的2个整数。 E.G:

3 2 4
91 94
92 97
97 99
92 94
93 97
95 96
90 100

我必须读取前3个数字,然后(在这种情况下)3 + 4行2个整数。如何正确读取输入?我将文件发送到在线编译器(如果重要的话,Codeforces.com)

这是我的代码(我尝试部分阅读该文件,但它不能按预期工作):

//reads the first 3 numbers
    public static int[] readInit(){
    Scanner sc = new Scanner(System.in);
    int[] integers = new int[3];
    for(int i = 0; i <=2; i++)
    {
        integers[i] = sc.nextInt();
    }
    return integers;
}

//reads the next 3 lines
public static int[] read(){
    Scanner sc = new Scanner(System.in);
    int[] integers = new int[2];
    for(int i = 0; i <=1; i++)
    {
        integers[i] = sc.nextInt();
    }
    return integers;
}

public static void main(String[] args) {
    int[] initData = readInit();
    nrOfRecipes = initData[0];
    minNrRecommended = initData[1];
    nrOfQuestions = initData[2];

    for (int i=0; i<nrOfRecipes; i++){
        int[] data = read();
        minDegrees = data[0];
        maxDegrees = data[1];
        ...
    }
    ...

但此代码仅从第一行读取前3个整数。如何正确读取数据?谢谢!

2 个答案:

答案 0 :(得分:0)

我会按照说明操作,先阅读abc。然后构造一个2D数组。然后填写它。最后(因为我不知道你想用你的k行做什么),你可能只是打印它。

Scanner sc = new Scanner(System.in);
int a = sc.nextInt(), b = sc.nextInt(), c = sc.nextInt();
int[][] arr = new int[a + c][b];
for (int i = 0; i < (a + c); i++) {
    for (int j = 0; j < b; j++) {
        arr[i][j] = sc.nextInt();
    }
}
System.out.println(Arrays.deepToString(arr));

根据您的示例输入,我得到

[[91, 94], [92, 97], [97, 99], [92, 94], [93, 97], [95, 96], [90, 100]]

答案 1 :(得分:0)

我无法正确理解您的问题,但如果您只想阅读每行中的两个integers,具体取决于第一行中的第一个和第三个int,您可以使用类似的东西:

try (Scanner sc = new Scanner(System.in)) {
        String[] first = sc.nextLine().split("\\s+");
        int lines = Integer.parseInt(first[0]) + Integer.parseInt(first[2]);
        while (lines-- > 0) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            // Do whatever you want here with the two integers
        }
    }

编辑: 如果通过System.in输入,nextLine将一次读取每一行,并且不会仅读取第一行。但是,您要在每种方法中重新初始化scanner。尝试使用一个scanner用于所有方法。 您可以通过在方法之外初始化扫描程序来执行此操作,如下所示:

static Scanner sc = new Scanner(System.in);

然后在您的方法中使用sc.nextInt();而不声明Scanner