2016-03-18 10 views
3

Ich bin neu in Java und versuche, das Konzept der shorthanded if-else Aussage zu lernen.Warum meine if else-Anweisung (d. H.?:) Nicht funktioniert?

Ich habe den folgenden Code entwickelt. Der Code wird jedoch nicht kompiliert und zeigt neben der if-else (d. H.?:) -Anweisung einen Fehler an.

Könnte mir bitte jemand sagen, warum funktioniert es nicht?

Sorry, wenn meine Frage für einige von Ihnen sehr albern klingt. Ich bin neu in Java.

Vielen Dank im Voraus für jede Hilfe!

List<String> ls1 = new LinkedList<>(Arrays.asList("hello", "world", "morning", "world")); 
Map<String, Integer> msi1 = new LinkedHashMap<>(); 

for(String s1 : ls1){ 
    Integer i1 = msi1.get(s1); 
    i1 == null ? msi1.put(s1, i1) : msi1.put(s1, i1 + 1));//why can't I use the short if-else statement like this. 
} 
+2

Welchen Fehler haben Sie erhalten? – user3437460

+2

Sie können kein ternary verwenden, das kein Ergebnis liefert, in diesem Fall ignorieren Sie den 'boolean' von' put'. Der Grund, warum es nicht wie erwartet funktioniert, ist einfach, wenn 'i1 == null' dann 'msi1.put (s1, null)' was wahrscheinlich nicht das ist, was Sie wollen. –

+2

Lassen Sie mich Sie [hier] (https://stackoverflow.com/questions/35330842/ternary-operator-with-multiple-condtions-in-java-throwing-error) und [hier] (https: // stackoverflow. com/questions/15977031/java-ternary-ohne-Zuordnung). – Majora320

Antwort

10

Der ternäre Ausdruck

condition ? when-true : when-false 

ist ein Ausdruck, keine Aussage, so kann nicht verwendet werden, wo eine Anweisung erforderlich ist.

Sie können dies als schreiben:

msi1.put(s1, (i1 == null) ? i1 : i1 + 1); 

denn dies ist eine Aussage.

+0

vielen Dank! jetzt habe ich verstanden! wird ankreuzen sobald SO mir erlaubt. :) –

+0

Ja, das ist die richtige Antwort – JeD

+2

Ich glaube nicht, dass der wahre Wert korrekt ist - ich denke, es sollte '1' sein, sonst bleibt es für immer bei' null'. (Dies wurde jedoch aus OP-Code kopiert) –

0

ich bin nicht sicher, was Sie versuchen, den Fall zu tun ist, wenn Sie die Anzahl der Vorkommen eines Wertes in einer Karte zu identifizieren versuchen, seine Schlüssel dann das ist, was Sie tun sollten,

Grundsätzlich entfernen der Extrakt ')' gegen Ende und Sie sollten immer die Ausgabe von ternären Operator zuweisen.

Integer test = i1 == null ? msi1.put(s1,1) : msi1.put(s1, i1 + 1); 
Verwandte Themen