【发布时间】: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