2010-09-26 14 views
0

Vu le code suivant:Modification d'une variable affecte une variable indirecte (valeur vs référence)

Rect pos = new Rect(); 
    for (int i = 0; i < mCols; i++) { 
     pos = mTiles[1][i].getmPos(); 
     pos.top = pos.top - size; 
     pos.bottom = pos.bottom - size; 
     mTiles[0][i].setmPos(pos); 
    } 

Ce que je veux faire est d'obtenir la valeur de

mTiles[1][i].mPos 

le modifier et le mettre dans

mTiles[0][i].mPos 

Le problème est cette déclaration

pos = mTiles[1][i].getmPos(); 

copie la référence à l'objet et non la valeur de l'objet. Ce qui veut dire que lorsque je modifie pos.top ou pos.bottom, l'objet original est modifié.

Je suppose qu'il me manque un concept d'objet pass par référence vs valeur ici ... que je pensais avoir compris. Quelle est la solution ici? Est-ce un problème avec la façon dont j'ai défini ma classe personnalisée?

Merci.

Répondre

1

Que diriez-vous

Rect pos = new Rect(); 
for (int i = 0; i < mCols; i++) { 
    pos = new Rect(mTiles[1][i].getmPos()); 
    pos.top = pos.top - size; 
    pos.bottom = pos.bottom - size; 
    mTiles[0][i].setmPos(pos); 
} 

?

+0

Ahh bien. Je n'ai jamais pensé à le faire de cette façon. Testé et fonctionne. Merci. – user432209

2

Vous aurez besoin d'un Rect temporaire pour modifier les valeurs avec, et d'attribuer uniquement les valeurs, et non l'ensemble de l'objet:

Rect pos; 
for (int i = 0; i < mCols; i++) { 
    pos = new Rect(); 
    pos.top = mTiles[1][i].getmPos().top - size; 
    pos.bottom = mTiles[1][i].getmPos().bottom - size; 
    mTiles[0][i].setmPos(pos); 
} 
+0

Cela ne devrait pas fonctionner en fonction de mon problème. Peut-être que je ne l'explique pas correctement. L'objet pos n'est jamais défini sur une valeur, il est défini comme une référence à l'objet mTiles [0] [i] .mPos. – user432209

+0

Ouais, mon erreur, je viens d'éditer ma réponse que j'ai réalisé ce qui se passait ... toujours pas sûr à 100% si cela va fonctionner: $ – Jaymz

+0

OK, je vous vois édité. Oui, correct, je dois assigner des valeurs pas une référence ... alors comment est-ce que j'accomplis cela sans devoir coder chaque .bottom, .top, .left, et .right? Essayer votre solution maintenant – user432209

Questions connexes