I am attempting to give a void function to a Tree. It calculates some parameters and uses Ids to reference some coordinates and the distance between them. The problem I have is that every recursion call returns me 0 on both parameters I use, I thought in Java every variable was a reference so this would work, but I seem to be missing something. Here is the code:
public void volumeandcost(Integer  volume,Float cost){
    if(children().equals(0)){//children() returns the number of children our tree has
        volume=volume+getCapacidad(this.root);//root is the Id
    }
    else{//recursive call
        ArrayList<Integer> myvol= new ArrayList();
        ArrayList<Float> mycost=new ArrayList();
        for(int i=0;i<this.children();i++){
            myvol.add(new Integer(0));
            mycost.add(new Float(0.0));                
            children.get(i).volumeandcost(myvol.get(i), mycost.get(i));
            cost=cost+mycost.get(i)+myvol.get(i)*
                  square(ProbIA5Board.m_dist.get(this.root).get(this.children.get(i).getId()));
        }
        //this calculates our volume in case we have children
        volume=min(getCapacidad(root)*3,mysum(myvol)+getCapacidad(root));
    }
}
I call this function with both parameters initially set at 0, and they come back in the same way after the call to volumeandcost.
After following some advice I implemented a new class Pair like this:
public class Pair {
Integer vol;Float cost;
public Pair (){this.vol=new Integer(0);this.cost=new Float(0);}
Integer getVol(){ return this.vol;}
Float getCost(){ return this.cost;}
void setVol(Integer x){this.vol=x ;}
void setCost(Float x){this.cost=x ;}
void addVol(Integer x){this.vol=this.vol+x;}
    void addCost(Float x){this.cost=this.cost+x;}
}
and modified the function so that it's like this:
    public void volumeandcostp(Pair p){
    if(children().equals(0)){
        p.setVol(p.getVol() + getCapacidad(this.root));//tenemos el volumen
    }
    else{//recursion
        ArrayList<Pair> myvol= new ArrayList();
        for(int i=0;i<this.children();i++){
            myvol.add(new Pair());                
            children.get(i).volumeandcostp(myvol.get(i));
            myvol.get(i).getCost());
            p.addCost(myvol.get(i).getCost()+ myvol.get(i).getVol()*                            square(ProbIA5Board.m_dist.get(this.root).get(this.children.get(i).getId())));
        }              p.setVol(min(getCapacidad(root)*3,mysump(myvol)+getCapacidad(root)));
    }   
}
But all the getters from Pair keep giving me 0 as answer.
 
     
    