将值输入到完整的2d阵列

时间:2017-05-27 13:01:17

标签: java

我目前正试图弄清楚如何将值添加到完整的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;
}

我目前所做的是为新行输入一个值,但是该方法将被多次调用以添加多个值。这意味着它将创建多行而不是添加到下一个可用列。

修改 数据类型输入错误,数组和值被赋予对象。

3 个答案:

答案 0 :(得分:0)

首先,您的代码会抛出IndexOutOfBoundsException。原因如下:

考虑if (i <= oldArray.length)子句。说,oldArray.length3。当i = 3newArray[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;
}