• ベストアンサー

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

当方、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"); //実行結果:エラー

  • Java
  • 回答数4
  • ありがとう数1

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

  • ベストアンサー
  • 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

  • この演算子は何の演算子でしょうか?

    下記のようなjavaコードがあります。 int mode = 1; if (true) mode|= 2; System.out.println(mode); これを実行すると結果は3になりますが、 ここで「|」とは何でしょうか? 恥ずかしいですが、 javaを1年半くらいやってきましたけど こんな演算子初めて見ます。 結果からみると 「mode|= 2」が「mode+= 2」と同じになりますが、 「+=」と「|=」は同じものでしょうか?

  • 演算子について

    こんにちは。JAVA超初心者です。 Javaの本に ++x はxを使ったあとに1増やす と書いてありましたが、イマイチ意味がわかりません。 「使う」とは?? int n = 0; int m = 0; m=n++; System.out.println(m); System.out.println(n); これの実行結果は 0 1 になるらしく、 m==n==; の意味は nの値(0)にmを代入した後nに1プラスする。 m=n++は m=n;,n=n=1;と書き換えられる。 とのことですが、どうもしっくり来ません。 nをmに代入するのなら、int m=0 が書いてある 意味がないような気がするし、 この実行結果に納得がいきません。私は 1 0 になると思うのですが・・・。 これ以上どう分かりやすく説明すればいいのか わからないと思われるかもしれませんが、 もし思いついたら教えてください。 宜しくお願いします。

    • ベストアンサー
    • Java
  • ビット演算子が使えない。

    こんにちは現在Javaをやっているいのですが、 //計算を行うプログラムです。 public class keisan{ public static void main(String args[]){ int num1=10; int num2=15; System.out.println("num1とnum2にいろんな演算を行っています。"); System.out.println("num1+num2は"+(num1 | num2)+"です。"); } } コンパイルはできましたが、 Exception in thread "main" java.lang.NoClassDefFoundError: keisan[ とエラーがでてきます。どうしたら良いのでしょうか? お願いします。

    • ベストアンサー
    • Java
  • javaについて

    以下のようにキーボードから入力していくプログラムを試行しているのですが、エラーが出てくるので行き詰まっています。 理想的にはキーボードに”あいう”エンター”えおか”エンターと打ち込んだら str[0]=あいう str[1]=えおか と表示させていきたいのですが、よろしくお願いします。 import java.io.*; import java.lang.*; import java.net.*; import java.awt.*; class gugu2 { public static void main(String[] args) throws IOException { int i=0; while(i<2){ System.out.println("キーワード入力"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); char str[] = input.toCharArray(); System.out.println("キーワードは" + str[]); i=i+1; } for(i=0;i<2;i++){ System.out.println(str[]); } } } これがエラー表示です。 gugu2.java:17: '.class' がありません。 System.out.println("キーワードは" + str[]); ^ gugu2.java:21: '.class' がありません。 System.out.println(str[]); ^ エラー 2 個

    • ベストアンサー
    • Java
  • かなり初歩的なプログラミング(Java)についての質問です。

    かなり初歩的なプログラミング(Java)についての質問です。 お恥ずかしながら、かなり初歩ではありますが躓いております・・・。 import java.util.Scanner; class OddEven{ public static void main(String args[]){ Scanner sc = new Scanner(System.in); System.out.println("整数を入力してください。"); String str1=sc.next(); int i = Integer.parseInt(str1); if(i%2==0){ System.out.println(i+"は偶数です。"); } else { System.out.println(i+"は奇数です。"); } } } } 以上のような内容なのですがコンパイルしようとすると 「OddEven.java:21: class、interface、または enum がありません。」 といったエラーがでます。 文法などは間違ってない!・・・と思うのですが・・・。 ご指摘していただきたいです。 あともう一つ質問です。じつはこっちが聞きたかったり・・・。 上記のソースコードを見ていただければわかると思いますが 「import java.util.Scanner;」 と最初の部分に記述していますが、これは授業で教師が教えてくれたもので手持ちの参考書では 「import java.io*;」 と記述されています。(もしかして今回のエラーもここから・・・?) この二つの違いは・・・聞いても正直分かりそうにはないので どっちを使っていけばいいか、などを教えていただきたいです。

    • ベストアンサー
    • Java
  • エラーメッセイジの意味は2

    javaの勉強中です。次のソースコードを作成しました ファイル名はMyOperator1.java です。 /** * 演算子の使用例1(加減剰余、剰余) * / public class MyOperator1 { public static void main (String)[] args) { int i= 20 ; int J= 3 ; // 足し算 int plus = i+j; // 引き算 int minus = i-j; // 割り算 int div = i/j ; // 掛け算 int multi = i*j ; // 剰余 int mod = i%j; System.out.println (i+"+"+j+"="+plus) ; System.out.println (i+"-"+j+"="+minus); System.out.println (i+"/"+j+"=" +div); System.out.println (i+"*"+j+"="+ multi); System.out.println (i+"%"+j+"="+mod); } } このソースコードをコンパイルしたら C:\Documents and Settings\NEC-PCuser\java\5_1_5>javac MyOperator1.java MyOperator1.java:1: コメントが閉じられていません。 /** ^ MyOperator1.java:28: 'class' または 'interface' がありません。 ←(ココにヤマ括弧) というエラーメッセイジがでました そのエラーメッセイジの意味がわかりません。 そもそもコンピュータ入門書には予想されるエラーメッセイジを具体的に全て掲載してくれません(きりがないから?)。 やはり独学は無理なのでしょうか?

    • ベストアンサー
    • Java
  • javaのプログラムについて

    java始めたばかりの者です。 class sample1 { public static void main(String[] args) { for(int i=1; i<=5; i++){ for(int j=0; j<i; j++){ System.out.println("*"); } System.out.println("\n"); } } } これを実行すると * * * * * * * * * * * * * * * こうなってしまい * ** *** **** ***** このようにするにはどうしたらいいのでしょうか??

    • ベストアンサー
    • Java
  • javaにおけるサブプロセスの待ち方

    以下のコードで問題が起きました。 javaからサブプロセスを読んで、サブプロセスの標準出力から 文字列を取得するプログラムです。 //Inter.java import java.io.*; public class Inter { static final int A = 10; public static void main(String[] arg) { String out = "Initial"; int c; Runtime rt = Runtime.getRuntime(); try{ Process ps = rt.exec("process.exe"); BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream())); System.out.println("Debug:OK"); for(c=0;c < A;c++)//ポイント1 { out = br.readLine(); System.out.println("java:" + out); } out = Integer.toString(ps.waitFor());//ポイント2 System.out.println("終了コード:" + out); }catch(Exception ex){ System.out.println("エラー"); } System.out.println("正常終了"); } } 一方呼び出されるサブプロセスは //process.c //compiled to process.exe #include <stdio.h> int main () { int i,k,n; for(i=0;i<100;i++) { printf("test%d\n",i); } return 235; } ここで、java側のコードの定数Aを1以上に設定るると期待どおりの結果が出るのですがA=0つまり、for文に一度も入らず、標準出力のストリームから文字列を一度も読まないとフリーズします。どうやら out = Integer.toString(ps.waitFor());//ポイント2 の部分で止まるようです。これはなぜでしょうか?これでは、標準出力があるサブプロセスの終了コードだけ知りたい時に不便ではないですか?これはもしやjava言語システムのバグではないでしょうか!waitFor()メソッドの実装が観たいのですがあいにくnativeキーワードがあるメソッドで手元のソースだけではでは中身がわかりません。nativeのさらに中の実装は見ることはできないのでしょうか?

    • ベストアンサー
    • Java
  • Integerについて

    class Sample5_7_Integer { /** * Integerクラスのメソッド */ public static void main(String[] args) { //String → int int i1 = Integer.parseInt(args[0]); //int型にすることにより計算可能 System.out.println(i1 + 100); //String → integer Integer i2 = Integer.valueOf(args[0]); System.out.println(i2); Integer i3 = new Integer(100); System.out.println(i2.equals(i3)); } } をEclipseで実行したところ、 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at benkyou.Sample5_7_Integer.main(Sample5_7_Integer.java:10) というエラーになってしまいます。 どなたか解決法をお願いします。

    • ベストアンサー
    • Java
  • arraycopy コンパイルエラー

    javaの勉強をしているのですが arraycopy()を使ったプログラムでエラーが出てしまいます。 class Ex97{ public static void main(String args[]){ int []a = new int[10]; int []b = new int[5]; for(int i=0; i<10; i++){ a[i] = (int)(Math.random()*10); } System.arraycopy(a, 2, b, 0, 5); for(int i=0; 0<a.length-1; i++){ System.out.println(a[i]); } System.out.println(""); for(int i=0; 0<b.length; i++){ System.out.println(b[i]); } } } /*メッセージ Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10 at Ex32.main(Ex32.java:13) */ このプログラムはaの3番目の要素から5つ分の内容をbへコピーする というものです。 ご回答よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう