2016-03-18 17 views
3

私はJavaを使い慣れておらず、簡略化されたif-elseの声明の概念を学ぼうとしています。if else文(つまり?:)がなぜ機能しないのですか?

私は以下のコードを思いついた。ただし、コードはコンパイルされず、if-else(?:)ステートメントの横にエラーが表示されます。

誰かが私になぜそれが機能しないのか教えてください。

申し訳ありません私の質問があなたの中には非常にばかげて聞こえる場合。私はJavaが初めてです。

ありがとうございました!

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

何かエラーがありましたか? – user3437460

+2

結果を返さない三項を使うことはできません。この場合、 'put'から' boolean'を無視しています。 'i1 == null'、' msi1.put(s1、null) 'のようなものが期待通りに動作しない理由は単純です。これはおそらくあなたが望むものではありません。 –

+2

私はあなた[ここ](https://stackoverflow.com/questions/35330842/ternary-operator-with-multiple-condtions-in-java-throwing-error)と[ここ](https:// stackoverflow。 com/questions/15977031/java-ternary-without-assignment)を使用します。 – Majora320

答えて

10

三発現

condition ? when-true : when-false 

発現、ないステートメントので、ステートメントが必要な場合に使用することができません。

あなたはこのように記述することができます。この文であるため、

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

+0

ありがとうございます!今私は理解した! SOが私を許可するとすぐにチェックします。 :) –

+0

これは正しい答えです – JeD

+2

真の価値は正しいとは思わない - 私はそれが '1'であるべきだと思う、そうでないと永遠に' null'にとどまる。 (これはOPのコードからコピーされたものです) –

0

は、私は、これはあなたが何をすべきかであるあなたがそのキーを使用してマップ内の値のoccurancesの数を特定しようとしている場合は場合は、やろうとしているかわからないんだけど

基本的に削除最後に向かって ')'を抽出し、常に三項演算子の出力を割り当てる必要があります。

Integer test = i1 == null ? msi1.put(s1,1) : msi1.put(s1, i1 + 1); 
関連する問題