if文の括弧と比較演算子
= と == の取り違え、&& と and の混同など、条件式まわりの定番ミスを扱います。
エラーメッセージの読み方
Main.java:4: error: '(' expected
Main.java- ファイル名
4- 行番号 — javacが異常に気づいた位置。原因の行とは限りません
error- 種別 — コンパイルエラー。実行まで到達しません
'(' expected- 内容 — javacが期待していたもの、または見つけられなかったもの
このエラーが出る典型パターン
パターン1
1 public class Main { 2 public static void main(String[] args) { 3 int n = 5; 4 if n > 3) { ^ 5 System.out.println("big"); 6 } 7 } 8 }
Main.java:4: error: '(' expected
ifの条件は必ず丸括弧で囲みます。Pythonのようにコロンで書くことはできません。
直し方: (空) を ( にします。
広告
広告スロット(未設定)
パターン2
1 public class Main { 2 public static void main(String[] args) { 3 int n = 5; 4 if (n = 5) { ^ 5 System.out.println("five"); 6 } 7 } 8 }
Main.java:4: error: incompatible types: int cannot be converted to boolean
= は代入、== は比較です。Javaでは代入結果がbooleanにならないため、その場で弾かれます。
直し方: = を == にします。
パターン3
1 public class Main { 2 public static void main(String[] args) { 3 int n = 5; 4 if (n > 1 and n < 10) { ^ 5 System.out.println("in range"); 6 } 7 } 8 }
Main.java:4: error: ')' expected
Javaの論理積は && です。and というキーワードはありません。& は評価が短絡しないビット演算です。
直し方: and を && にします。
パターン4
1 public class Main { 2 public static void main(String[] args) { 3 int n = 0; 4 while n < 3) { ^ 5 System.out.println(n); 6 n++; 7 } 8 } 9 }
Main.java:4: error: '(' expected
whileもifと同じく条件式を丸括弧で囲みます。省略はできません。
直し方: (空) を ( にします。
パターン5
1 public class Main { 2 public static void main(String[] args) { 3 int score = 75; 4 if (score => 60) { ^ 5 System.out.println("pass"); 6 } 7 } 8 }
Main.java:4: error: illegal start of expression
「以上」はJavaでは >= と書きます。=> はラムダ式で使う矢印であり、比較演算子ではありません。
直し方: => を >= にします。
よくある誤解
= と == は1文字違いですが、Javaでは即エラーになります。代入結果がbooleanにならない仕様のおかげで、C言語より救われています。
まとめ
if文の括弧と比較演算子は初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。