【问题标题】:Integer Array of Arrays Indexing数组索引的整数数组
【发布时间】:2017-03-08 22:58:12
【问题描述】:

我正在创建大量 Integer[][] 数组,并且需要使用 Integers 而不是 int,因为我随后将它们存储在 ArrayList 中。尝试以这种格式访问索引时遇到错误,如果仅使用 int[][] 数组,我通常不会得到这些错误。这是我正在使用的代码:

Integer[][] vector_xi = new Integer[NUM_ROWS][NUM_COLS];
vector_xi[x][y] = vector_xi[x][y] + 1; \\I need to increment values in the table when events occur

编译器不喜欢上面这行代码,所以我尝试初始化值:

for (int j = 0; i < NUM_ROWS; i++) {
    for (int k = 0; k < NUM_COLS; j++) {
        vector_xi[j][k] = 0;
    }
}

虽然它也不会让我这样做。似乎只是尝试访问我创建的 Integer[][] 数组的索引会使它崩溃。这与 Integer 对象有关吗?我怎样才能解决这个问题?感谢您的帮助!

【问题讨论】:

  • 对您遇到的“错误”非常具体。 “它不会让我这样做”。 “它”说了什么?
  • 第一个for 循环声明j,但检查并递增i真的吗? --- 第二个for 循环声明并检查k,但增加了j真的吗?
  • “因为我之后将它们存储在 ArrayList 中”是否意味着列表必须包含对数组引用的相同 Integer 对象的引用?这似乎不太可能,因为当您需要修改值时,数组引用的对象必须更改。如果您不需要相同的引用,那么您应该能够使用int[][] 并将(如Integers)复制到您的列表中。
  • 在收集数据时使用int[][]。然后+ 1(或++)会快得多。稍后转换为Integer,当您将数组转换为List时。
  • 自动装箱可以非常方便,但它带来的其中一个问题是对何时使用原语的理解减少了。为了记录,它是只要原始人可以完成这项工作。如果两者都是可行的选择,则永远不要喜欢包装类而不是原始类型。

标签: java arrays multidimensional-array integer


【解决方案1】:

需要使用整数而不是整数,因为我之后将它们存储在 ArrayList 中。

ints 自动装箱到 Integers 所以这应该不是问题。只需使用int[][]

 int[][] vector_xi = new int[NUM_ROWS][NUM_COLS];

而且你的 for 循环变量看起来很可疑(你没有声明 i 并且你从不增加 k)。它应该看起来像这样:

for (int j = 0; j < NUM_ROWS; j++) {
    for (int k = 0; k < NUM_COLS; k++) {
        vector_xi[j][k] = 0;
    }
}

【讨论】:

  • 当然,当您更改为 int[][] 时,for 循环变得多余,因为它们已经被零填充了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 2013-07-04
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多