2016-03-22 16 views
1
private void calculateForEachQuestion() { 
    ... 
    if (questions.size() >= answers.size()) { 
     answers.forEach(answer -> { 
      if (questions.contains(answer)) 
       this.answer.setPoints((this.answer.getPoints())++); 
       // Variable expected^     
    }); 
} 

Der Fehler I ist aufgetreten:Variable erwartet

unerwartete Art
benötigt: Variable
gefunden: Wert

Was mit der Aussage ist falsch? diese

this.answer.setPoints((this.answer.getPoints())++); 
+2

Sie sollten den genauen Fehler angeben, den Sie sehen. –

+0

Wenn postincrement in Java genauso funktioniert wie in C (ziemlich wahrscheinlich), dann würde * selbst wenn die Syntax korrekt wäre *, Sie würden immer noch mit dem gleichen Wert enden ... – usr2564301

+1

Ich glaube nicht, dass Sie '' verwenden können ++ 'Bei einem Wert erwartet es eine Variable. Probieren Sie stattdessen "+ 1". – markspace

Antwort

6

Der Operator ++ ist nur sinnvoll, wenn er auf eine deklarierte Variable angewendet wird.

Dieser Operator fügt einen zu einem integer, long usw. hinzu und speichert das Ergebnis in derselben Variablen an Ort und Stelle.

Wenn keine Variable deklariert ist, kann das Ergebnis nicht gespeichert werden, weshalb sich der Compiler beschwert.

Eine Möglichkeit, die Verwendung des ++ Bediener in dieser Situation zu ermöglichen würde (nicht die prägnanteste Code, sondern um den Punkt zu veranschaulichen) sein:

int myVariable = this.answer.getPoints(); 
myVariable++; 
this.answer.setPoints(myVariable); 
3

Wechsel:

this.answer.setPoints((this.answer.getPoints())++); 

zu:

this.answer.setPoints((this.answer.getPoints())+1); 

++ inkrementiert eine Variable mit 1, aber da this.answer.getPoints() einen Wert und es ist nicht eine definierte Variable zurückgeben, es gewann Der inkrementierte Wert kann nicht gespeichert werden.

Denken Sie daran wie: this.answer.getPoints() = this.answer.getPoints() + 1, wo würde der inkrementierte Wert gespeichert werden?

+0

Warum "this" nicht auslassen? Es ist völlig unnötig, oder? – Gendarme

+0

@AndrewTobilko, weil Sie den Rückgabewert einer Methode nicht ändern können, und '++' ändert die Variable, auf der es verwendet wird? –

4

this.answer.getPoints() einen Wert zurück, und Sie können nicht Verwenden Sie dazu das Inkrement ++ oder dekrementieren Sie --. Sie können es nur für Variablen verwenden.

Wenn Sie 1, um es hinzufügen möchten, können Sie es wie tun:

this.answer.setPoints((this.answer.getPoints())+1); 

Ich weiß, dass, aber warum?

Sie können dies tun:

int x = 5; 
x++; // x is a variable and can have value 6 

aber nicht dieses:

5++; // 5 is a value and can't have value 6 
1

Der Fehler ist nur in diesem Bit:

(this.answer.getPoints())++ 

Der erste Teil dieses (this.answer.getPoints()) erstellt einen Rvalue: effektiv, eine anonyme Variable, die dauert fast keine Zeit.Der zweite Teil ++ erhöht die anonyme Variable nach.

Dann wird die anonyme Variable (jetzt inkrementiert) verworfen.

Der Compiler/IDE weiß, dass Sie etwas tun, das niemals verwendet wird (erhöht einen temporären Wert) und markiert es.

Verwandte Themen