• ベストアンサー

三項演算子についてお聞きします。

当方、Javaに取り組み始めた初心者です。 C言語で int i = 20; i <= 10 && i >= 0 ? printf("ok") : printf("ng"); //実行結果:ng と記述するとエラーにならずにちゃんと実行されるのですが、JAVAで同じように記述するとエラーになります。なぜでしょうか??お詳しい方、ご教授いただけると幸いです。 [Java] int i = 20; i <= 10 && i >= 0 ? System.out.println("ok") : System.out.println("ng"); //実行結果:エラー

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

「実行結果」ではなく、その前のコンパイルでのエラーでは? http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.8 に、書いてありますね。 3項演算子は全体で「式」なので、C/C++の文法では、「式;」の形の命令文となるけど、 Javaの文法では「式;」だけでは命令文にはならない。(代入式等の特定の式だけ、;を付けて命令文になる) まあ、いくら使えるからと言って、「i <= 10 && i >= 0 ? printf("ok") : printf("ng");」の用にif文代りに使うのは、あまりいい使い方では無いと思います。 System.out.println("ok")とSystem.out.println(("ng")の選択ではなく、 System.out.printlnの引数に"ok"と"ng"の選択、とすればプログラムは動くし、意味としてもわかりやすいと思います。 System.out.println(i <= 10 && i >= 0 ? "ok" : "ng");

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

実は, この例に関しては 15.25 Conditional Operator ? : のところに It is a compile-time error for either the second or the third operand expression to be an invocation of a void method. と, モロに書いてあったりします>#3.

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

System.out.println(i <= 10 && i >= 0 ? "ok" : "ng"); ならできていいような気がします. C とと違って Java では「セミコロンをつけて文にできる」式が制限されてます. たとえば 1; は C では正しい (意味はない) 文だけど, Java ではエラーになるはず.

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

仕様です. ちなみにそもそも実行できないはず.

dainithi
質問者

お礼

仕様ですよね。 やはりPHPやC言語のように直接出力はできないんですね。まぁ、このように使う機会がないと思いますが。 そうすると、一度String strなど、変数を用意してそれをSystem.out.printで出力ですね。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A