读取具有二维数组的文本文件并找到每列的总和并将总和添加到数组中

问题描述 投票:0回答:2

嘿伙计们,我想阅读一个文本文件,它有多个类似于二维数组的数字。我想找到每列的总和并将其添加到我的 int 数组中。我还想跳过第一列而不是将其添加到我的 int 数组中。例如:

  • 0001 1 2 3 4 5 6 7 8 9
  • 0002 1 2 3 4 5 6 7 8 9
  • 0003 2 3 4 5 6 7 8 9 10

所以这将是我的文本文件。我想阅读此内容但跳过第一列并将该列的其余部分添加到一个 int 数组中。所以我希望我的 int array[] 看起来像

  • 整数数组[0] = 4
  • 整数数组[1] = 7
  • 整数数组[2] = 10
  • 整数数组[3] = 13
  • 整数数组[4] = 16
  • 整数数组[5] = 19
  • 整数数组[6] = 22
  • 整数数组[7] = 25
  • 整数数组[8] = 28

到目前为止我有这个:


public static void main(String[] args) throws FileNotFoundException
    {
        String fileRead = "";
        int[][] num = null;
        File file = new File("C:\\Users\\Tommy\\Documents\\day.txt");
        Scanner reader = new Scanner(file);
        while(reader.hasNextLine())
            fileRead += reader.nextLine();
        String line = fileRead;
        String[] info = line.split(" ");
        for (int i = 1; i < info.length; i++)
        {
            System.out.println(info[i]);        
        }
}

我的代码没有完成,因为我不知道如何添加列。但到目前为止它打印第一行并跳过 0001。但随后它打印第二行并且不跳过 0002。所以到目前为止我的代码的输出看起来像:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

然后它打印出来

  • 90002
  • 1
  • 2
  • 3
  • 4

等 关于如何解决这个问题的任何线索?

java arrays multidimensional-array
2个回答
0
投票

你的

fileRead
变量得到第一行,在第二行它立即连接第二行,所以字符串看起来像这样:

..90002 1 ..

你只需要在 while 循环中插入一个空格即可。

while(reader.hasNextLine())
            fileRead += reader.nextLine();
            fileRead += “ “;

编辑

while(reader.hasNextLine()){
    fileRead += reader.nextLine();
    fileRead +=‘$’;


String line = fileRead;
String[] infoRow = line.split("$");
int[] results = new int[9];

for (int i = 0; i< infoRow.length;i++){
        string[] info = infoRow[i].split(" ");
        for (int j = 1; j < info.length; j++){
              results[j-1] += Integer.parseInt(info[j]);  
            }
    }
for (int i = 0; i< results.length;i++){
    System.out.println(results[i]);
}

0
投票

有很多方法可以做到这一点。这是一种主要在您阅读值时执行此操作的方法。

String fileName = "f:/Data.txt";
int[] sums = null;
Scanner scanner = null;

try {
    scanner = new Scanner(new File(fileName));
} catch (Exception e) {
    e.printStackTrace();
}

现在字段已经初始化并且文件已成功打开,您可以处理文件了。

  • 只要线路可用,请执行以下操作。
    • 如果
      sums
      字段为空,这是第一次通过所以在第一行中读取,跳过第一个int,并创建一个分配给
      int array
      sums
    • 否则,跳过以下行的第一个
      int
      ,并将该行的其余部分作为整数添加到相应的总和列中。
while (scanner.hasNextLine()) {
    if (sums == null) {
        sums = Arrays.stream(scanner.nextLine().split("\\s+"))
                .skip(1)
                .mapToInt(Integer::parseInt).toArray();
    } else {
        scanner.nextInt(); // skip first value
        for (int i = 0; i < sums.length; i++) {
            sums[i] += scanner.nextInt();
        }
    }
}
System.out.println(Arrays.toString(sums));

版画

[4, 7, 10, 13, 16, 19, 22, 25, 28]

注意:由于您没有指定如何处理同一二维数组的不同行长度,因此这仅适用于每行长度相同的情况。否则将抛出

IndexOutOfBounds
异常。

© www.soinside.com 2019 - 2024. All rights reserved.