2010-07-13 13 views
0
transfering

Ceci est une question de suivi de Problem with array assignmentvaleurs du tableau de float globales ne sont pas les classes

J'ai maintenant addcube fait comme si .. et tous les travaux comme prévu, quand j'imprimer le tableau. mais quand j'imprime AFTER attribution du même indice dans une autre classe Il me dit leur égale à 0. Donc les valeurs ne sont pas 'économisantes'. Pourquoi est-ce? Comment est-ce que je corrigerais ceci?

 public void addcube(float highx, float lowx, float highz, float lowz){ 
     //Constructing new cube... 
System.out.println("f = " + f); 
     Global.cubes++; 
     float y = 1.5f; 
     System.out.println("highx = " + highx + "lowx = " + lowx + "highz = " +   highz + "lowz = " + lowz); 
     //FRONT 
     Global.camObjCoord[Global.i] = highx; 
     Global.i++; 
     System.out.println("cube i = " + Global.i); 
} 

Dans les deux cas, je suis l'impression comme si ...

int p = 0; 
      while(p < 72){ 
       System.out.println(Global.camObjCoord[p]); 
       p++; 
      } 

Global.i = 0 au début.

Les seuls autres endroits, le tableau est référencé est le suivant ..

cubeBuff = makeFloatBuffer(Global.camObjCoord);

   FloatBuffer makeFloatBuffer(float[] arr) { 
      ByteBuffer bb = ByteBuffer.allocateDirect(arr.length*4); 
      bb.order(ByteOrder.nativeOrder()); 
      FloatBuffer fb = bb.asFloatBuffer(); 
      fb.put(arr); 
      fb.position(0); 
      return fb; 
    } 

Il n'y a pas refrences plus au tableau dans mon code.

Merci.

+2

Nous ne pouvons pas dire, parce que vous n'avez pas montré le code qui fait l'impression. Je doute beaucoup que cela n'arrive pas à stocker les données. Je soupçonne plutôt que vous imprimez un index différent. –

+0

Question mise à jour avec le code .. – Skizit

+1

@Meowmix: Et qu'est ce que 'Global.i' avant l'appel à' addcube'? Vous nous laissez toujours deviner. Si vous pouviez poster un programme court mais * complet *, je suis sûr que la raison deviendra évidente - mais vous devriez vraiment, vraiment cesser d'utiliser des variables globales comme celle-ci. –

Répondre

2

Je remettrait sérieusement en question votre conception. Vous vous référez toujours à cette classe Global, qui semble apparemment être changé de partout, et donc vous rencontrez de tels problèmes (par exemple précédemment avec votre NullPointerException). Essayez séparément les choses en utilisant encapsulation et do not just use one global state qui est opéré par différentes classes. Si les classes ne fonctionnent strictement que sur leurs propres membres, les dépendances sont réduites et il est beaucoup plus facile de suivre où les données sont manipulées.

1

Je pense que votre code ressemble à ceci:

System.out.println(Global.camObjCoord[Global.i]); 
addcube(/* values here */); 
System.out.println(Global.camObjCoord[Global.i]); 

et il est l'impression de 0. Eh bien, c'est pas imprimer le même indice après la cession, parce que la valeur Global.i change au cours addcube. Par exemple, supposons Global.i est 3 avant l'appel à addcube. L'appel à addcube définira Global.camObjCoord[3] sur une valeur, puis définira Global.i sur 4, de sorte que la ligne finale affichera Global.camObjCoord[4] - c'est-à-dire et non la valeur qui vient d'être définie.

Ce genre de chose est précisément la raison pour laquelle les variables globales sont une mauvaise idée ...

+0

Le code ne ressemble pas à ça, cochez à nouveau la question J'ai mis à jour. – Skizit