【问题标题】:How to store and change values for 2D lists?如何存储和更改二维列表的值?
【发布时间】:2018-03-05 21:03:49
【问题描述】:

我有一个函数可以汇总数组的行并将其显示在开头/结尾的一列中。它最初是使用 2D 数组 (int[][]) 完成的,并且工作正常。我现在想将输入更改为二维列表(List<List<Integer>>)而不是数组。这是使用 int[][] 的函数,目前有效:

public static void sumLeft(int[][] numbers) {
    for (int i = 0; i < numbers.length; i++) {
        for (int j = 1; j < numbers[i].length; j++) {
            numbers[i][0] += numbers[i][j];
            numbers[i][j] = 0;
        }
    }
}

所以如果我接受这个数组:

10  15  30  40  
15  5   8   2   
20  2   4   2   
1   4   5   0

结果如下:

95  0   0   0   
30  0   0   0   
28  0   0   0   
10  0   0   0

现在我想做同样的事情,但使用 2D 列表或List&lt;List&lt;Integer&gt;&gt;

这是我目前拥有的:

public static void listLeft(List<List<Integer>> list) {
    int sum = 0;
    for (int i = 0; i < list.size(); i++) {
        List<Integer> innerList = list.get(i);
        for (int j = 0; j < list.get(i).size(); j++) {
            sum += list.get(i).get(j);
            innerList.set(0, sum);
            innerList.set(j, 0);
        }
    }
}

如果我输入同一组数字,它会输出:

95  0   0   0   
125 0   0   0   
153 0   0   0   
163 0   0   0

*注意第 2-4 行的值有误。

【问题讨论】:

  • 提示:数组的实现之和与列表的实现之和之间存在关系。仔细观察;)(或使用调试器)。

标签: java arrays algorithm arraylist multidimensional-array


【解决方案1】:

sum 移动到跨越列表的for 循环中。此外,您不需要将第一个列表项设置为与列表中的每个项目相加;你可以在最后设置一次。

public static void listLeft(List<List<Integer>> list) {

    for (int i = 0; i < list.size(); i++) {
        int sum = 0;
        List<Integer> innerList = list.get(i);
        for (int j = 0; j < list.get(i).size(); j++) {

            sum += list.get(i).get(j);
            innerList.set(j, 0);
        }
        innerList.set(0, sum);
    }
}

【讨论】:

  • 成功了。但是,与问题中的初始方式相比,在最后设置一次的原因是什么。
  • @Zubair:在第二个 Lists 代码示例中,您不需要重复将第一项设置为 sum,因为变量 sum 一直累加到最后每个列表的。在您使用 2D 数组的原始代码中,您不需要 sumvariable,因为每行中的第一项是累加器,因此您确实需要重复更新第一项。您还可以看到差异,因为第一个版本中的内循环以j=1 开头,而第二个代码以j=0 开头。
  • 您知道如何调整循环以便将总和保存在第一行/最后一行吗?所以我会得到这样的东西:46 26 47 440 0 0 00 0 0 00 0 0 0
  • @Zubair:将第一行中的每个项目用作累加器。这种方法只有在矩阵是正方形的情况下才有效。基本上用第一项作为第一行的累加器,第二项作为第二行的累加器,以此类推
猜你喜欢
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多