';' expected の原因と直し方
セミコロンの付け忘れで出る最頻出エラー。javacがどこで文の終わりを探しているかを読めば、行番号が実際の原因とずれる理由も分かります。
エラーメッセージの読み方
Main.java:3: error: ';' expected
Main.java- ファイル名
3- 行番号 — javacが異常に気づいた位置。原因の行とは限りません
error- 種別 — コンパイルエラー。実行まで到達しません
';' expected- 内容 — javacが期待していたもの、または見つけられなかったもの
このエラーが出る典型パターン
パターン1
1 public class Main { 2 public static void main(String[] args) { 3 int count = 10 ^ 4 System.out.println(count); 5 } 6 }
Main.java:3: error: ';' expected
Javaは文の終わりをセミコロンで判断します。改行では文が終わりません。
直し方: (空) を ; にします。
広告
広告スロット(未設定)
パターン2
1 public class Main { 2 public static void main(String[] args) { 3 System.out.println("Hello") ^ 4 } 5 }
Main.java:3: error: ';' expected
メソッド呼び出しも1つの文です。閉じ括弧で終わりではなく、そのあとにセミコロンが要ります。
直し方: (空) を ; にします。
パターン3
1 public class Main { 2 static int twice(int n) { 3 return n * 2 ^ 4 } 5 public static void main(String[] args) { 6 System.out.println(twice(3)); 7 } 8 }
Main.java:3: error: ';' expected
return文もセミコロンで閉じます。次の行に } があっても、javacは文が続いていると解釈します。
直し方: (空) を ; にします。
パターン4
1 public class Main { 2 public static void main(String[] args) { 3 int count = 0; 4 count = count + 1 ^ 5 System.out.println(count); 6 } 7 }
Main.java:4: error: ';' expected
代入文もセミコロンで終わります。宣言でなくても文である以上、同じルールが適用されます。
直し方: (空) を ; にします。
パターン5
1 public class Main { 2 public static void main(String[] args) { 3 for (int i = 0; i < 5; i++) { 4 if (i == 3) { 5 break ^ 6 } 7 System.out.println(i); 8 } 9 } 10 }
Main.java:5: error: ';' expected
breakも1つの文です。キーワードだけで完結しているように見えても、セミコロンが必要です。
直し方: (空) を ; にします。
よくある誤解
報告される行番号が原因の行とは限りません。javacは次の行まで読んでから「;がない」と判断するため、実際に抜けているのは1つ前の行であることがほとんどです。
まとめ
';' expectedは初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。