【问题标题】:How to set value of cell in List<int[][]>?如何在 List<int[][]> 中设置单元格的值?
【发布时间】:2017-10-18 18:56:31
【问题描述】:

我有一个列表List&lt;int[][]&gt; orgnisms = new ArrayList&lt;&gt;();,我已经填充了几个空(只有 0 个值)表,我现在想设置某些单元格的值。例如,我希望列表和单元格[1][1] 中的第一个表具有1 的值。我该如何做到这一点?

编辑:

我有一个问题,因为orgnisms.get(0)[1][1] = 1; 将值1 添加到列表中的每个表中,而不仅仅是具有索引0 的表...

这是我生成一个新的空多维数组的代码,然后将其添加到orgnisms 列表中:

private void newEmptyArrays(){
        int[][] emptyTable = new int[n][n]; 
        for( int[] ii : emptyTable) 
            for (int i : ii)
                i = 0;

        for(int i=0;i<mi;i++)  
            orgnisms.add(emptyTable);

}

【问题讨论】:

  • identifier.get(0)[1][1] = 1;
  • List&lt;int[][]&gt; = new ArrayList&lt;&gt;(); ?没有标识符
  • @Aominè 添加答案以获得“解决”
  • for (int i : ii) i = 0; 绝对什么都不做。如果要将数组归零,则需要执行for (int i = 0; i &lt; ii.length; i++) ii[i] = 0;Arrays.fill(ii, 0);

标签: java arrays list multidimensional-array


【解决方案1】:

同一个“表”被多次添加到列表中,但它只是在以下代码部分中创建的唯一一个“表”(原始问题,不是解决方案):

int[][] emptyTable = new int[n][n]; 
for(int i=0;i<mi;i++)  
    orgnisms.add(emptyTable);

由于多次只有一个实例,因此更改表的列表索引没有区别。 orgnism.get(0)orgnism.get(1) 相同(实例)等等...

解决方案:为列表中的每个条目创建一个新的“表”:

for(int i=0;i<mi;i++) {
    int[][] emptyTable = new int[n][n];
    orgnisms.add(emptyTable);
}

请注意,以下代码部分中的赋值不会改变数组中的值 - 清除数组是行不通的:

for (int i : ii)
    i = 0;  // this only changes the value of the variable, 
            // not of the array entry (not written back)

【讨论】:

    【解决方案2】:
    List<int[][]> orgnisms = new ArrayList<>();
    

    列表中的每个元素都是一个多维数组,因此如果您想访问其中任何一个,您首先需要通过List#get 方法检索它,然后对其执行一些操作,即

    orgnisms.get(0)[1][1] = 1;
    

    orgnisms.get(0) 将检索对多维数组的引用,然后[1][1] 将索引到检索到的多维数组的行1 和列1 并为其分配一个值1

    更新

    我有一个问题,因为 orgnisms.get(0)[1][1] = 1;添加值 1 到列表中的每个表,不仅是索引为 0 的表...

    仔细查看您的最后一个循环,您在orgnisms 列表中存储了对 same 多维数组的多个引用,因此发生这种行为是有意义的。

    另外,根据您的更新,代码并没有按照您的想法执行。事实上,嵌套的for 循环没有emptyTable 多维数组做任何事情。但是,默认情况下,emptyTable 内的所有数组的每个元素都设置了 0 值,这意味着 尝试 再次将它们设置为 0冗余

    也就是说,你可以相应地改变你的方法:

    private void newEmptyArrays(){
          for(int i = 0; i < mi ; i++){  
             int[][] emptyTable = new int[n][n]; 
             orgnisms.add(emptyTable);
          }
    }
    

    【讨论】:

    • 我有问题,因为 identifier.get(0)[1][1] = 1;为列表中的每个表添加值,而不仅仅是索引为 0 的表...
    • 看看我的编辑。能不能让每张表都设置同一个单元格?
    • @Xalion 查看我的更新。让我了解其他任何信息。
    • 我写下了orgnisms.add(new int[n][n]);,它开始添加到某些表(不是每个表)!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    相关资源
    最近更新 更多