如何使用 Java 中的循环在 3D 数组中添加元素?

Posted

技术标签:

【中文标题】如何使用 Java 中的循环在 3D 数组中添加元素?【英文标题】:How can I add elements in a 3D array using loops in Java? 【发布时间】:2017-01-27 00:06:30 【问题描述】:

我知道如何在 2D 数组中添加元素,但由于某种原因,我的 3D 数组无法正常工作,我做错了吗?

for (int i = 0; i < ROWS; i++)

        for (int j = 0; j < COLUMNS; j++)

            for (int k = 1; k < IN; k++)
                myArray [i][j][k] = i + 10;
            
        

    

我有这样的数组 myArray = new int [COLUMNS][ROWS][IN];是对的吗?因为它应该像 array = 1,2,3,4,5,6,7,8,9;

【问题讨论】:

为什么你的 k 循环从 1 开始,而不是像其他的那样从 0 开始? 怎么了?提供更多细节、更多代码或解释会发生什么? @DM 因为我希望添加的第一个元素是 1 @Piotrowy 喜欢将此作为输出 0,10,10Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 at ExerciseThree.printArrayStatement(ExerciseThree.java:117) at ExerciseOne。 main(ExerciseOne.java:12) myArray = new int [COLUMNS][ROWS][IN]; - 如果这是你的声明,那么i 应该可能转到COLUMNSj 应该可能转到ROWS 【参考方案1】:

这与创建 2D 数组没有什么不同。

    // creating 3D array
    int[][][] myArray = new int[r][c][n];
    for (int i=0; i<r; i++)
        for (int j=0; j<c; j++)
            for (int k=0; k<n; k++)
                myArray[i][j][k] = i + 10;
            
        
    

【讨论】:

【参考方案2】:

如果这是您的数组:1, 2, 3, 4, 5, 6, 7, 8, 9,那么您不需要 3D 数组,只需要一个 2D 数组。

上述数组的元素(您提供的)是:

myArray[0][0] // 1        myArray[0][1] // 2        myArray[0][2] // 3
myArray[1][0] // 4        myArray[1][1] // 5        myArray[1][2] // 6
myArray[2][0] // 7        myArray[2][1] // 8        myArray[2][2] // 9

相应地调整您的代码:

for (int i = 0; i < ROWS; i++)
    for (int j = 0; j < COLUMNS; j++)
        myArray[i][j] = i + 10;
    


在 3D 中执行此操作

如果您要处理一些 3D 数据,您只需在当前代码中添加另一个维度。数组得到另一个维度,我们添加另一个[]。 for 循环得到另一个维度,我们添加另一个嵌套循环。

也许我们正在跟踪 3D 网格中的值,因此我们将尺寸定义为网格的大小,如下所示:

int rows = 3;
int columns = 4;
int layers = 5;

我们像你说的那样声明我们的 3D 数组:

int[][][] my3dArray = new int[rows][columns][layers];

然后我们可以初始化这些值并开始使用我们的数组,就像您开始一样,只是这次我们不打算引用变量行和列。

相反,这次我们将引用数组的长度。这使我们的代码更加灵活。另一个程序/类可以创建一个 3d 数组并将其发送到我们的程序,即使我们事先不知道它们的网格大小(就像我们对我们的网格所做的那样),它仍然可以正常工作。

for (int i = 0; i < my3dArray.length; i++) 

    for (int j = 0; j < my3dArray[0].length; j++) 

        for (int k = 0; k < my3dArray[0][0].length; k++) 

            // I randomly picked some formula
            my3dArray[i][j][k] = i + j * 100 + k * 10000;

    


【讨论】:

我明白了,我已经添加到我的原始答案中,我认为这可能是您正在寻找的。如果有帮助,请告诉我! 感谢您的帮助:)【参考方案3】:

你为什么不推荐这个answer? 我希望这能帮助您解决问题。

【讨论】:

【参考方案4】:

这是你的代码,在 for 循环和正确的赋值 i*10 + j + k*80; 中切换了 'COLUMNS' 和 'ROWS'

public static int [][][] myArray = new int[][][];
public static final int ROWS = 8, COLUMNS = 10, IN = 3;
public ExerciseThree() 
    myArray = new int [ROWS][COLUMNS][IN];
    for (int i = 0; i < ROWS; i++)
        for (int j = 0; j < COLUMNS; j++)  
            for (int k = 0; k < IN; k++)
                myArray [i][j][k] = i*10 + j + k*80;
            
        
    
...

您在打印 3d 数组时也有错误。您应该在 103 和 115 行中将循环条件从 &lt;= 切换到 &lt;。但是这种方式更好:

for (int i = 0; i < ROWS; i++)
    System.out.print("");
    for (int j = 0; j < COLUMNS; j++)
        System.out.print("");  
        for (int k = 0; k < IN; k++)
            myArray [i][j][k] = i*10 + j + k*80;
            if (k < IN - 1) 
                System.out.print(",");
            
        
        System.out.print(",");
    
    System.out.print(",\n");

【讨论】:

@C.Ikongo 完整答案在这里。您可以将此答案标记为正确答案。

以上是关于如何使用 Java 中的循环在 3D 数组中添加元素?的主要内容,如果未能解决你的问题,请参考以下文章

java数组如何循环添加元素

如何在three.js中的位置半径内获取其他3D对象

泛化 Java 中的 for 循环

展平 3D NumPy 数组中的内部元组并作为浮点数保存到 CSV

java怎么 清除数组数据?

java中 如何在一个数组中删除里面的元素