user3130648
user3130648

Reputation: 97

Clear multi dimensional Object in Java

I want to pass 4 arrays from a method which is in A class, to a method in B class. I create an instance of class A in the method which is in class B to get the arrays.

The method in A class is defined as Object[] and I use:

return new Object[]{Array1,Array2,Array3,Array4};

to return the arrays.

In method of B class I get the arrays with an object defined as:

private Object outGeoObj[] = new Object[4];

I am retrieving successfully the arrays, but I want to clear the object before I use it again. I tried:

public void ClearValues(){
    if (outGeoObj != null){
        outGeoObj = null;
    }
    else{
        System.out.println("Object is null");
    }  
}

but it doesn't work. Any suggestions?

Minimal Working Example:

Class B:

public class MainFem {

private OutGeoMesh outmesh;
private Object outGeoObj[] = new Object[4]; // [0: Xmpoint, 1: Ympoint, 2: Vec, 3: numpoints]


public MainFem() {
    outmesh = new OutGeoMesh();
}

public void ClearValues(){

    if (outGeoObj != null){
        for(int i = 0; i < outGeoObj.length; i++) {
             outGeoObj[i] = null;
        }
    }
    else{
        System.out.println("Object is null");
    }  

} // END Method ClearValues



public void MainStart(int Xpoint[][], int Ypoint[][], int nump[], int c2, int Line[][][], DrawPanel drawPanel){

    outGeoObj = outmesh.createOutGeomesh(Xpoint, Ypoint, nump, c2, Line, drawPanel);

     int temp = (int[][]) outGeoObj[3];
     System.out.println(temp[0][0]);

   }// End Method MainStart
} // END CLASS MainFem

Class A:

public class OutGeoMesh {

private double Xmpoint[][][] = new double[500][200][20];  
private double Ympoint[][][] = new double[500][200][20];
private double Vec[][][] = new double[500][2][20];  
private int numpoints[][] = new int[500][20];  

public OutGeoMesh() {
    // TODO Auto-generated constructor stub
}

public Object[] createOutGeomesh(int Xpoint[][], int Ypoint[][], int nump[], int c2, int Line[][][], DrawPanel drawPanel) {

  for (int j = 0; j <= c2; j++) {
        for (int i = 0; i < nump[j]; i++) {

            Vec[i][0][j] = i;
            Vec[i][1][j] = i+1;

            Xmpoint[i][0][j] = Xpoint[i][j];
            Ympoint[i][1][j] = Ypoint[i][j];

            numpoints[i][j] = numpoints[i][j] + 1;

      } // END FOR i

    } // END FOR j


 return new Object[]{Xmpoint,Ympoint,Vec,numpoints};

} // END METHOD createOutGeomesh
// ---------------------------------

} // END CLASS OutGeoMesh

Upvotes: 1

Views: 88

Answers (1)

AJMansfield
AJMansfield

Reputation: 4129

You need to do something like this:

Arrays.fill(outGeoObj, null);

The reason that your code doesn't work is because you are only erasing your reference to the array, but other parts of your code are still using that same array. By using Arrays.fill you can erase the contents of the array.

Upvotes: 1

Related Questions