2016-03-18 16 views
3

Java'ya yeniyim ve shorthanded if-else bildirimini öğrenmeye çalışıyor.Neden benim if ifadem (yani??) Neden çalışmıyor?

Aşağıdaki kodla geldim. Ancak, kod derlenmez ve if-else (örn .:?:) Ifadesinin yanında bir hata görüntülemez.

Birisi bana neden çalışmıyor olduğunu söyleyebilir mi?

Sorularımın bazılarına çok aptalca geliyorsa özür dilerim. Java’da yeniyim.

Yardımlarınız için şimdiden teşekkür ederiz!

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

Hangi hata ile karşılaştınız? – user3437460

+2

Sonuç döndürmeyen bir üçlü kullanamazsınız, bu durumda 'put 'den' boolean'ı göz ardı edersiniz. Beklediğiniz gibi çalışmadığı için basit, eğer 'i1 == null' sonra 'msi1.put (s1, null) ', muhtemelen sizin istediğinizi değil. –

+2

Size burada (https://stackoverflow.com/questions/35330842/ternary-operator-with-multiple-condtions-in-java-throwing-error) ve [burada] (https: // stackoverflow. com/sorular/15977031/java-üçlü-olmadan-atama). – Majora320

cevap

10

üçlü ifade

condition ? when-true : when-false 

bir sentezleme değil, bir açıklama, bu nedenle bir açıklama gerekli olduğu kullanılamaz. Bu bir ifadedir çünkü

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

:

Sen olarak bu yazabilirsiniz.

+0

çok teşekkür ederim! şimdi anladım! SO bana izin verir girmez işaretler. :) –

+0

Evet bu doğru cevap – JeD

+2

Doğru değerin doğru olduğunu sanmıyorum - sanırım 1 'olmalı, aksi halde' null 'sonsuza kadar kalır. (Bu OP'nin kodundan kopyalandı) –

0

i o zaman bu yapmanız gereken budur onun anahtarı kullanarak bir harita bir değerin oluşumları sayısını tespit etmeye çalışıyoruz eğer durumda, yapmaya çalıştıkları emin değilim

Temelde kaldırmak ekstre ')' sonuna doğru ve her zaman üçlü operatörün çıkışını atamalısınız.

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