Code Fix

初級

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パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)