【问题标题】:Copying array elements within multidimensional arrays in Java在 Java 中复制多维数组中的数组元素
【发布时间】:2016-05-02 22:36:44
【问题描述】:

所以我在 java 中遇到了一些麻烦。这个方法应该接受两个多维的字符串数组。此方法应该返回一个复制字符串数组。现在这两个被发送到复制方法的数组将在数组中随机生成长度。我正在尝试查看 array2 是否小于 array,如果是,则 array 将被分配 array2 的长度,我想将元素从 array 复制到 array2。如果它与array2 大于array 相反,那么我想将数组中的元素复制到array2 中,然后array2 中的剩余点将被一个* 填充。现在的问题是我不断收到超出索引范围的运行时错误。特别是我在下面用双星号表示的行(在 for 循环内)给我带来了问题。我能做些什么来解决这个问题。

    public static String[][][] copy(String[][][] array, String[][][] array2){
    if(array2.length < array.length){
        array = new String[array2.length][array2.length][array2.length];
        for(int i = 0; i < array2.length; i++){
            for(int j = 0; j < array2[i].length; j++){
                for(int k = 0; k < array2[i][j].length; k++){
                    **array2[i][j][k] = array[i][j][k];**
                }
            }
        }
        return array2; 
    }
    if(array2.length > array.length){

        for(int i = 0; i < array.length; i++){
            for(int j = 0; j < array[i].length; j++){
                for(int k = 0; k < array[i][j].length; k++){
                    **array2[i][j][k] = array[i][j][k];**
                }
            }
        }
        for(int i = array.length - 1; i < array2.length; i++){
            for(int j = array[i].length - 1; j < array2.length; j++){
                for(int k = array[i][j].length - 1; k < array2.length; k++){
                    array2[i][j][k] = "*";
                }
            }
        }
        return array2;
    }
    return array;
}

【问题讨论】:

  • 其他人可以提供任何意见吗?

标签: java arrays multidimensional-array


【解决方案1】:

您假设数组的每个维度大小相同。
但是您甚至不能假设两个同级数组大小相同。
我的意思是,array = new String[array2.length][array2.length][array2.length]; 是无稽之谈,至少在两个方面。
您可能想要array2 = new String[array.length][][],因为如果您重新分配array,您将只是复制nulls。对于其他维度的长度,您必须进行相同的比较和调整大小,特别是如果您没有重新分配array2。如果你这样做了,那么无论如何你都必须重新创建子级数组。

【讨论】:

  • 这是一个开始,但到目前为止还不是您的代码的修复。启动调试器并尝试理解您的代码。也许读一本关于 Java 及其数组的书。 ;-)
  • 对于第一个 if 语句,只应复制长度不超过 array2 的数组元素,所以我不太确定 array2 = new String[array.length][][] 是否有效。
  • 可能不是,但是如果你从array复制到array2array2小于array,你应该在array2.length处裁剪,那么分配绝对没有意义arrayarray2 有一个新值。
  • 是的,我只是尝试了两种方法,但我仍然收到该特定行的运行时错误。
  • 我告诉过你,你的代码逻辑完全搞砸了。你必须彻底重新思考或调试你的逻辑。我刚刚向您解释了您的问题,这就是您获得 AIOOBE 的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 1970-01-01
  • 2019-01-15
  • 2017-12-25
相关资源
最近更新 更多