2017-07-29 6 views
0

Tout d'abord, ce sont des entiers, pas des entiers. Je veux obtenir une variable d'une autre classe et le comparer à une valeur, comme suit:La méthode Java renvoie int qui ne peut pas être comparé à un autre int (Android Studio)

Log.v("xx", "" + boardAdap.getPieceNumber()); 
int pieceNumberInt = boardAdap.pieceNumber; 

if (pieceNumberInt == 32) { 
    Log.v("xx", "int comparison worked"); 
} 

int pieceNumberMethod = boardAdap.getPieceNumber(); 

if (pieceNumberMethod == 32) { 
    Log.v("xx", "method comparison worked"); 
} 

Alors, je veux obtenir la variable pieceNumber de la classe boardAdap, et vérifier si elle est égale à 32. Si c'est le cas, il imprime les choses dans Log in the console.

La méthode boardAdap:

int pieceNumber; 
int pieceNumberIncrement; 

public int getPieceNumber() { 
    for (int i = 0; i < 64; i++) { 
     if (board.getPiece(Square.squareAt(i)).name() != "NONE") { 
      this.pieceNumberIncrement++; 
     } 
    } 
    this.pieceNumber = pieceNumberIncrement; 
    return pieceNumber; 
} 

Ce par un ENUM itère appelé la place, et incrémente pieceNumberIncrement si la valeur est "NONE". Cependant, quand je lance cela, la sortie est:

32 
int comparison worked 

Alors, pourquoi la seconde si la condition échoue, si getPieceNumber() retourne un int? Il échoue également lorsque j'utilise un wrapper Integer ou convertit pieceNumberMethod en une chaîne puis en Integer et d'autres méthodes.

De même, devrais-je changer getPieceNumber() pour simplement mettre à jour le numéro de pièce à la place, et référence seulement cela?

De plus, si pieceNumberMethod est utilisé dans une boucle comme:

for (int i = 0; i < pieceNumberMethod; i++) { 
} 

La boucle ne sera jamais arrêter.

Merci!

Répondre

1

Vous appelez essentiellement getPieceNumber deux fois si dans le deuxième appel le nombre change.

int pieceNumberMethod = boardAdap.getPieceNumber(); 
Log.v("xx", "" + pieceNumberMethod); 
int pieceNumberInt = boardAdap.pieceNumber; 

if (pieceNumberInt == 32) { 
    Log.v("xx", "int comparison worked"); 
} 


if (pieceNumberMethod == 32) { 
    Log.v("xx", "method comparison worked"); 
} 

Essayez d'appeler la méthode une seule fois.
Espérons que cela fonctionne!

+0

Merci pour la réponse rapide Ziya, je vais vérifier si cela fonctionne un peu et accepter si cela fonctionne :) –

+0

Oui, c'était le problème, j'ai oublié de réinitialiser pieceNumberIncrement à 0 avant de compter à nouveau. Merci encore! –

+0

Vous êtes les bienvenus :) –

1

Le problème consiste à comparer les chaînes. Vous avez besoin d'égal à égal (« aucun »)

String none = new String("NONE"); 
int count = 32; 

System.out.println(count); 
for (int i = 0; i < 64; i++) { 
    if (none != "NONE") { 
     count++; 
    } 
} 
System.out.println(count); 

Si vous exécutez ce code, il imprimera des valeurs différentes pour « count » malgré la valeur « none »

+0

C'est une mauvaise pratique oui, mais dans cet exemple, elle renvoie le bon numéro et ne cause pas le problème. –

+0

Le message qui imprime est le premier et non le second. Pourriez-vous vérifier si vous avez déjà atteint l'incrément dans la boucle? – efekctive

+0

Oui cela ne fonctionne pas, la sortie est de 32, 96. –