Code Fix

初級

cannot find symbol (variable) の原因と直し方

変数名のタイプミス、宣言忘れ、スコープ外参照の3パターンに分けて原因を切り分けます。

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

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

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

パターン1

 1  public class Main {
 2      public static void main(String[] args) {
 3          int total = 10;
 4          System.out.println(totals);
                                  ^
 5      }
 6  }
Main.java:4: error: cannot find symbol symbol: variable totals

Javaは大文字小文字を区別します。宣言した名前と1文字でも違えば別の変数として扱われます。

直し方: totalstotal にします。

この問題を解いてみる →

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

パターン2

 1  public class Main {
 2      public static void main(String[] args) {
 3          x     = 5;
              ^
 4          System.out.println(x);
 5      }
 6  }
Main.java:3: error: cannot find symbol symbol: variable x

Javaは変数を使う前に型とともに宣言する必要があります。代入だけでは変数は生まれません。

直し方: xint x にします。

この問題を解いてみる →

パターン3

 1  public class Main {
 2      public static void main(String[] args) {
 3          if (true) {
 4              int inner = 1;
 5          }
 6          System.out.println(inner     );
                                    ^
 7      }
 8  }
Main.java:6: error: cannot find symbol symbol: variable inner

波括弧の中で宣言した変数は、その括弧を出た時点で消えます。これをスコープと呼びます。

直し方: inner"done" にします。

この問題を解いてみる →

パターン4

 1  public class Main {
 2      static void setup() {
 3          int total = 100;
 4      }
 5      public static void main(String[] args) {
 6          System.out.println(total     );
                                    ^
 7      }
 8  }
Main.java:6: error: cannot find symbol symbol: variable total

メソッドの中で宣言したローカル変数は、そのメソッドの外からは見えません。別のメソッドの変数を直接使うことはできません。

直し方: total100 にします。

この問題を解いてみる →

パターン5

 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          System.out.println(i     );
                                  ^
 7      }
 8  }
Main.java:6: error: cannot find symbol symbol: variable i

for文のかっこの中で宣言した変数は、そのfor文の中だけで使えます。ループを抜けると消えます。

直し方: i"done" にします。

この問題を解いてみる →

よくある誤解

cannot find symbol を「ライブラリが足りない」と読む人が多いですが、9割はタイプミスかスコープ外の参照です。import を疑う前に綴りを見てください。

まとめ

cannot find symbol (variable)は初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

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