java - 无法让 A 类中的数组在 B 类中工作

标签 java arrays

我正在开发一个java项目。当我第一次开始时,我在一个 java 类中有很多代码。这开始变得非常困惑,所以我尝试将代码传播到其他类中。这就是我遇到数组问题的地方。

我创建了一个创建数组的类,该数组有一个 getter 方法,因此我的主类可以使用它。

public class CreateBlockArray {

private static int[][][] blockarray;


public CreateBlockArray(){

//get coordinates 

    //fill array        
    int[][][] blockarray = new int[Xdelta+ 10][Ydelta + 10][Zdelta + 10];

    blockarray = fillarray(Xlow,Ylow, Zlow, Xhigh, Yhigh, Zhigh, blockarray   );
    blockarray = getvisibleBlocks(Xlow,Ylow, Zlow, Xhigh, Yhigh, Zhigh, blockarray);    
    blockarray = filloceanfloor(Xlow,Ylow, Zlow, Xhigh, Yhigh, Zhigh, blockarray);  
    //these three methods modify array and than return it

}


public int[][][] getBlockarray() {
    return blockarray;
}     

在主类中我使用这个

CreateBlockArray Array = new CreateBlockArray();
int[][][] blockarray = Array.getBlockarray();
//more code
if (blockarray[i][k][j] != 0) //it crashes here

这会产生空指针异常。 从 stackoverflow 上的类似问题中我了解到数组不是原始数组而是引用。

所以我尝试使用此代码简单地逐 block 复制数组

blockarray2 = new int[(Xhigh-Xlow)+10][(Yhigh-Ylow)+10][(Zhigh-Zlow) +10];
    for(int h = Ylow;  h <= Yhigh;h++)
    {
    for(int i = Xlow;  i <= Xhigh;i++)
    {           
    for(int j = Zlow;  j <= Zhigh;j++)
    {                           

        blockarray2[i-Xlow][h-Ylow][j-Zlow] = blockarray[i-Xlow][h-Ylow][j-Zlow];

    }}}  

当我返回时,一切正常,没有错误。 我还可以返回第一个数组而不必复制它吗?

最佳答案

问题出在这个构造函数中:

public CreateBlockArray(){

//get coordinates 

    //fill array        
    int[][][] blockarray = new int[Xdelta+ 10][Ydelta + 10][Zdelta + 10];

    blockarray = fillarray(Xlow,Ylow, Zlow, Xhigh, Yhigh, Zhigh, blockarray   );
    blockarray = getvisibleBlocks(Xlow,Ylow, Zlow, Xhigh, Yhigh, Zhigh, blockarray);    
    blockarray = filloceanfloor(Xlow,Ylow, Zlow, Xhigh, Yhigh, Zhigh, blockarray);  
    //these three methods modify array and than return it

}

当您在方法中重新声明类时,您并没有真正修改类的 blockarray :

int[][][] blockarray = new int[Xdelta+ 10][Ydelta + 10][Zdelta + 10];

只需更改该行

blockarray = new int[Xdelta+ 10][Ydelta + 10][Zdelta + 10];

并删除该行中的static标识符:

private static int[][][] blockarray;

关于java - 无法让 A 类中的数组在 B 类中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30652455/

相关文章:

java - 从对象中的对象调用对象中的方法

java - 深度优先遍历和调整矩阵

java - Android 服务 android.os.BinderProxy 错误

java - sipFactory.setPathName ("gov.nist");运行时错误

javascript - 检查键/值对对象数组的简洁方法?

java - 寻找主类

javascript - 如何检查包含子数组的数组的大小?

python - 将 bytearray 从 VARBINARY(16) 列转换为 IP 地址

php - 使用 ConfigParser 从 ini 文件中读取数组

java - 缺少一些代码;具有 Add() 和 Remove() 方法的 ArrayList 模式