2015-08-03 1 views
-1

Je exemple suivant:opérateur Increment ne fonctionne pas pour variable d'instance en java

Class A{ 
    private int errorCount = 0; 
    private int successCount = 0; 
    boolean errorFound = false; 

    private void functionName(){ 
     // Some Statements 
     if(errorFound){ 
      this.errorCount = this.errorCount++; 
     }else{ 
      this.successCount = this.successCount++; 
     } 
    } 
} 

La sortie est toujours 0.

Pourquoi l'opérateur incrément ne fonctionne pas pour les variables d'instance?

+1

duplication possible de [Pourquoi est-ce que cela va dans une boucle infinie?] (Http: // stackoverflow .com/questions/3831341/why-does-this-go-in-an-infinite-loop) –

Répondre

1

Rappelez-vous que l'opérateur d'incrémentation this.errorCount++; est équivalent à this.errorCount = this.errorCount + 1;

Votre sortie est zéro parce que le résultat de cette opération est 0.

+1

Ce n'est pas tout à fait correct, 'this.successCount = (this.successCount = this.successCount + 1)' sortirait la bonne réponse. –

1

Vous devez utiliser variable++ pas variable = variable++. L'appel de l'opérateur post-incrément renvoie l'ancienne valeur, puis incrémente, dans ce cas, votre variable reste toujours à 0.

+0

Merci, j'ai compris la logique. Si j'avais utilisé l'opérateur de pré-incrémentation plutôt que d'utiliser l'opérateur post-incrément, alors le résultat aurait été comme prévu. Ai-je raison? –

+1

@SenthilkumarGopal Vous avez raison; le pré-incrément s'incrémente puis revient. Cependant, il n'y a pas besoin d'utiliser 'variable = ++ variable' dans votre code.' Thiscount.successCount ++' ou 'this.errorCount ++' fonctionneront seuls. C'est la même chose que d'écrire 'variable + = 1' qui est le même que d'écrire' variable = variable + 1'. –