我目前正试图弄清楚如何将值添加到完整的2d数组中。任何帮助将不胜感激。
这就是我现在所拥有的。
public static ObjectA[][] addValue(ObjectA value, ObjectA[][] oldArray)
{
//Creates a new array with an extra row
ObjectA[][] newArray = new ObjectA[oldArray.length +1][oldArray[0].length]
for (int i= 0 ; i < newArray.length; i++)
{
for (int ii = 0; ii <= newArray[0].length; ii++)
{
// when the index exceeds the oldArray
// it will add the value to the newArray
if (i <= oldArray.length)
{
newArray[i][ii] = oldArray[i][ii];//copies all values into newArray
}
else
{
newArray[i][ii] = value; //adds value to the last row
}
}
}
return newArray;
}
我目前所做的是为新行输入一个值,但是该方法将被多次调用以添加多个值。这意味着它将创建多行而不是添加到下一个可用列。
修改 数据类型输入错误,数组和值被赋予对象。
答案 0 :(得分:0)
首先,您的代码会抛出IndexOutOfBoundsException
。原因如下:
考虑if (i <= oldArray.length)
子句。说,oldArray.length
是3
。当i = 3
,newArray[i][ii] = oldArray[i][ii]
行搜索oldArray[3][ii]
元素但没有这样的元素时。 oldArray
的所有可能元素都是oldArray[0][ii]
,oldArray[1][ii]
和oldArray[2][ii]
,因为在编程中计数从0
开始。
其次,我没有为每个下一个值添加另一行。如果您不打算为每一行添加一组值,那么,为什么要考虑扩展行数?
答案 1 :(得分:0)
当您需要在元素访问复杂性和添加新列的复杂性之间进行权衡时,这是典型情况
如果您需要在没有新结构分配的情况下快速添加列,则应使用LinkedList作为行的存储,并在每次需要添加新列时调用list.add(row),以便您的代码如下所示:
public static void addValue(int value, LinkedList<int[]> list) {
int[] row_you_need_to_add = new int[list.get(0).length];
for (int i = 0; i < list.get(0).length; i++) {
row_you_need_to_add[i] = value;
}
list.add(row_you_need_to_add);
}
答案 2 :(得分:0)
由于2D Array是一个由Array中的数组组成的数组。因此,在2D阵列的每个索引处都存在另一个阵列并且具有特定大小。
public static ObjectA[][] addValue(ObjectA value, ObjectA[][] oldArray) {
ObjectA[][] newArray = new ObjectA[oldArray.length +1][oldArray[0].length]
for (int i= 0 ; i < newArray.length; i++) {
for (int ii = 0; ii <= newArray[0].length; ii++) {
// when the index exceeds the oldArray
// it will add the value to the newArray
if (i <= oldArray.length) {
newArray[i][ii] = oldArray[i][ii];//copies all values into newArray
} else {
newArray[i][ii] = value; //adds value to the last row
}
}
}
return newArray;
}