如何在不使用arraylist的情况下调整多维数组的大小(java)

亨德里克

我需要将数组的大小从w [i] [j] [q] [k]重置为w [i + 2] [j + 2] [q] [k]。我不想使用列表数组,因为我必须更改程序的大部分内容。我读了一些线程,可以创建所需大小的新数组,并使用java.lang.System.arraycopy(...)将内容从原始数组复制到新数组。

我尝试如下,但不适用于我的方法:

 int [][][][] w = new int [18][18][[Main.V+1][Main.k]; 

 (...)

 int[][][][] wNew = new int[20][20][Main.V+1][Main.k]; 

 for(int i=0; i<wNew.length; i++){
        for(int j=0; j<wNew[0].length; j++){
            for(int q=0; q<wNew[0][0].length; q++){
                for(int k=0; k<wNew[0][0][0].length; k++){
                    System.arraycopy(w, 0, wNew, 0, 18);
                }
            }
        }
    }

w = wNew;

(...)

在添加位置处操作数组时,发生java.lang.ArrayIndexOutOfBoundsException:18(以下示例:

w[0][19][1][0] = 1; (this line now causes an error)
布鲁诺·德洛(Bruno Delor)

System.arraycopy(w,0,wNew,0,20);

这20是要复制的数组元素的数量。您输入了新的尺寸,使用旧的尺寸。在您的示例中为18。

其次,您的for循环基于您的新大小。这是向后的,您必须读取原始数组并将其插入新数组,因此必须迭代原始数组的大小(要调整大小,当然要减小它的大小,反之亦然)。

但更重要的是,您不必迭代所有尺寸。我将为您传递一些代码,您可以执行这些代码以亲自查看。

导入java.util.Arrays; 导入java.util.Random;

public class Test {

    public static final int SIZE_DIM1 = 2;
    public static final int SIZE_DIM2 = 2;
    public static final int SIZE_DIM3 = 5;
    public static final int SIZE_DIM4 = 5;
    private static final int INCREMENT = 2;

    public static void main(String[] args) {
        int[][][][] w = new int[SIZE_DIM1][SIZE_DIM2][SIZE_DIM3][SIZE_DIM4];

        randomFill(w);

        display(w);

        int[][][][] wNew = new int[SIZE_DIM1 + INCREMENT][SIZE_DIM2 + INCREMENT][SIZE_DIM3][SIZE_DIM4];

        for (int i = 0; i < w.length; i++) {
            for (int j = 0; j < w[i].length; j++) {
                System.arraycopy(w[i][j], 0, wNew[i][j], 0, w[i][j].length);
            }
        }

        display(wNew);

        w = wNew;

        w[0][3][4][4] = 1;

    }

    public static void randomFill(int[][][][] w) {
        Random random = new Random();
        for (int[][][] w2 : w) {
            for (int[][] w3 : w2) {
                for (int[] w4 : w3) {
                    for (int i = 0; i < w4.length; i++) {
                        w4[i] = random.nextInt();
                    }
                }
            }
        }
    }

    public static void display(int[][][][] w) {
        System.out.println("Printing---------------------------------------------------------------------------------");


        System.out.print("[\n");
        for (int[][][] w2 : w) {
            System.out.print("\t[\n");
            for (int[][] w3 : w2) {
                System.out.print("\t\t[\n");
                for (int[] w4 : w3) {
                    System.out.print("\t\t\t[");
                    for (int element : w4) {
                        System.out.print(element + " ");
                    }
                    System.out.print("]\n");
                }
                System.out.print("\t\t]\n");
            }
            System.out.print("\t]\n");
        }
        System.out.print("]\n");

    }

}

如您所见,您不必遍历所有子数组。只是大小有所变化的那些。

执行它,这将是显而易见的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不使用gparted的情况下调整Windows分区的大小?

来自分类Dev

在不使用LVM的情况下调整分区大小

来自分类Dev

Java-如何在不使用别名的情况下返回方法多维数组

来自分类Dev

如何在不使用 Java 索引的情况下从 Arraylist 中删除数组元素

来自分类Dev

(Python--numpy)如何在不循环的情况下调整numpy数组的大小并对其进行切片?

来自分类Dev

(Python--numpy)如何在不循环的情况下调整numpy数组的大小并对其进行切片?

来自分类Dev

如何在不使用 Pillow 的情况下在 Python 中调整图像大小

来自分类Dev

如何在不使用PHP的循环的情况下计算多维数组的元素数?

来自分类Dev

如何在不消除锯齿的情况下调整画布大小?

来自分类Dev

如何在不剪切文本的情况下调整按钮的大小

来自分类Dev

如何在C#中保持高宽比的情况下调整图像大小

来自分类Dev

如何在不影响其他表列的情况下调整单个JTable列的大小

来自分类Dev

如何在没有百分比的情况下调整弹性项目的大小?

来自分类Dev

如何在不修改元素内容的情况下调整其大小。的CSS

来自分类Dev

如何在不丢失现有数据的情况下调整std :: vector的大小?

来自分类Dev

如何在不影响其他表列的情况下调整单个JTable列的大小

来自分类Dev

在Word中,如何在不更改表宽度的情况下调整列的大小?

来自分类Dev

如何在不丢失现有数据的情况下调整std :: vector的大小?

来自分类Dev

如何在不丢失任何数据的情况下调整分区大小(使我的Ubuntu分区更大)?

来自分类Dev

如何在不重新创建分区的情况下调整分区大小

来自分类Dev

如何在不裁剪或降低质量的情况下调整图像大小?

来自分类Dev

Three.js – 如何在不调整渲染器或缩放内容的情况下调整画布大小?

来自分类Dev

在VB.NET中,如何在不使用属性值的情况下调用属性的Getter?

来自分类Dev

打字稿:如何在各处不使用“ this”的情况下调用变量

来自分类Dev

如何在“按查询分组”中不使用linq的情况下调用C#方法

来自分类Dev

如何在不使用malloc的内存的情况下调用opendir?

来自分类Dev

如何在Python中不使用括号的情况下调用具有参数的函数

来自分类Dev

如何在不使用过滤器的情况下调用番石榴谓词?

来自分类Dev

如何在不使用MSXML的情况下调用ASP.Net制造的Web服务?

Related 相关文章

  1. 1

    如何在不使用gparted的情况下调整Windows分区的大小?

  2. 2

    在不使用LVM的情况下调整分区大小

  3. 3

    Java-如何在不使用别名的情况下返回方法多维数组

  4. 4

    如何在不使用 Java 索引的情况下从 Arraylist 中删除数组元素

  5. 5

    (Python--numpy)如何在不循环的情况下调整numpy数组的大小并对其进行切片?

  6. 6

    (Python--numpy)如何在不循环的情况下调整numpy数组的大小并对其进行切片?

  7. 7

    如何在不使用 Pillow 的情况下在 Python 中调整图像大小

  8. 8

    如何在不使用PHP的循环的情况下计算多维数组的元素数?

  9. 9

    如何在不消除锯齿的情况下调整画布大小?

  10. 10

    如何在不剪切文本的情况下调整按钮的大小

  11. 11

    如何在C#中保持高宽比的情况下调整图像大小

  12. 12

    如何在不影响其他表列的情况下调整单个JTable列的大小

  13. 13

    如何在没有百分比的情况下调整弹性项目的大小?

  14. 14

    如何在不修改元素内容的情况下调整其大小。的CSS

  15. 15

    如何在不丢失现有数据的情况下调整std :: vector的大小?

  16. 16

    如何在不影响其他表列的情况下调整单个JTable列的大小

  17. 17

    在Word中,如何在不更改表宽度的情况下调整列的大小?

  18. 18

    如何在不丢失现有数据的情况下调整std :: vector的大小?

  19. 19

    如何在不丢失任何数据的情况下调整分区大小(使我的Ubuntu分区更大)?

  20. 20

    如何在不重新创建分区的情况下调整分区大小

  21. 21

    如何在不裁剪或降低质量的情况下调整图像大小?

  22. 22

    Three.js – 如何在不调整渲染器或缩放内容的情况下调整画布大小?

  23. 23

    在VB.NET中,如何在不使用属性值的情况下调用属性的Getter?

  24. 24

    打字稿:如何在各处不使用“ this”的情况下调用变量

  25. 25

    如何在“按查询分组”中不使用linq的情况下调用C#方法

  26. 26

    如何在不使用malloc的内存的情况下调用opendir?

  27. 27

    如何在Python中不使用括号的情况下调用具有参数的函数

  28. 28

    如何在不使用过滤器的情况下调用番石榴谓词?

  29. 29

    如何在不使用MSXML的情况下调用ASP.Net制造的Web服务?

热门标签

归档