Code Fix

初級

reached end of file while parsing の原因と直し方

波括弧の対応が崩れたときに出ます。エラー行がファイル末尾を指すため、原因箇所の特定にコツが要ります。

エラーメッセージの読み方

Main.java:5: error: reached end of file while parsing
Main.java
ファイル名
5
行番号 — javacが異常に気づいた位置。原因の行とは限りません
error
種別 — コンパイルエラー。実行まで到達しません
reached end of file while parsing
内容 — javacが期待していたもの、または見つけられなかったもの

このエラーが出る典型パターン

パターン1

 1  public class Main {
 2      public static void main(String[] args) {
 3          System.out.println("Hello");
 4      }
 5   
    ^
Main.java:5: error: reached end of file while parsing

開いた波括弧の数だけ閉じる必要があります。クラスの閉じ括弧が足りないと、ファイル末尾まで読んでから報告されます。

直し方: (空)} にします。

この問題を解いてみる →

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

パターン2

 1  public class Main  
                      ^
 2      public static void main(String[] args) {
 3          System.out.println("Hi");
 4      }
 5  }
Main.java:1: error: '{' expected

クラス宣言の直後には本体を開く波括弧が要ります。ここが欠けると以降すべてが宣言の一部と解釈されます。

直し方: (空){ にします。

この問題を解いてみる →

パターン3

 1  public class Main {
 2      public static void main(String[] args) {
 3          for (int i = 0; i < 3; i++)  
                                        ^
 4              System.out.println(i);
 5          }
 6      }
 7  }
Main.java:7: error: class, interface, enum, or record expected

forの本体を波括弧で囲まないと、次の1文だけが本体になります。残った閉じ括弧が対応先を失い、ファイル末尾で構文エラーになります。

直し方: (空){ にします。

この問題を解いてみる →

パターン4

 1  public class Main {
 2      static void greet() {
 3          System.out.println("Hi");
 4       
        ^
 5      public static void main(String[] args) {
 6          greet();
 7      }
 8  }
Main.java:4: error: illegal start of expression

greetメソッドの閉じ括弧が足りないと、次のpublicがメソッド本体の中の文として読み込まれ、構文が崩れます。

直し方: (空)} にします。

この問題を解いてみる →

パターン5

 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:9: error: class, interface, enum, or record expected

whileの本体を波括弧で囲まないと、次の1文だけが本体になります。残った閉じ括弧が対応先を失い、ファイル末尾で構文エラーになります。

直し方: (空){ にします。

この問題を解いてみる →

よくある誤解

エラー行がファイル末尾を指しますが、原因はもっと上にあります。行番号を追うより、インデントを揃えて括弧の対応を目で追うほうが速いです。

まとめ

reached end of file while parsingは初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

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