cannot find symbol (method) の原因と直し方
println、length、toUpperCase など、綴りと大文字小文字を間違えやすいメソッド名を集めました。
エラーメッセージの読み方
Main.java:3: error: cannot find symbol
Main.java- ファイル名
3- 行番号 — javacが異常に気づいた位置。原因の行とは限りません
error- 種別 — コンパイルエラー。実行まで到達しません
cannot find symbol- 内容 — javacが期待していたもの、または見つけられなかったもの
このエラーが出る典型パターン
パターン1
1 public class Main { 2 public static void main(String[] args) { 3 System.out.printline("Hello"); ^ 4 } 5 }
Main.java:3: error: cannot find symbol
symbol: method printline(String)
printlnは print line の略で、末尾は l と n の2文字です。
直し方: printline を println にします。
広告
広告スロット(未設定)
パターン2
1 public class Main { 2 public static void main(String[] args) { 3 String s = "java"; 4 System.out.println(s.Length()); ^ 5 } 6 }
Main.java:4: error: cannot find symbol
symbol: method Length()
Javaのメソッド名は小文字始まりが慣習です。Stringの長さは length()、コレクションは size() と使い分けます。
直し方: Length を length にします。
パターン3
1 public class Main { 2 public static void main(String[] args) { 3 String s = "java"; 4 System.out.println(s.toupperCase()); ^ 5 } 6 }
Main.java:4: error: cannot find symbol
symbol: method toupperCase()
複数語のメソッド名は2語目以降の頭を大文字にします。この書き方をキャメルケースと呼びます。
直し方: toupperCase() を toUpperCase() にします。
パターン4
1 public class Main { 2 public static void main(String[] args) { 3 String a = "JAVA"; 4 String b = "java"; 5 System.out.println(a.equalsIgnorCase (b)); ^ 6 } 7 }
Main.java:5: error: cannot find symbol
symbol: method equalsIgnorCase(String)
大文字小文字を無視して比較するメソッドです。Ignoreのeを1つ落とすだけで別のメソッド名になり、見つかりません。
直し方: equalsIgnorCase を equalsIgnoreCase にします。
パターン5
1 public class Main { 2 public static void main(String[] args) { 3 String s = "hello world"; 4 System.out.println(s.containes("world")); ^ 5 } 6 }
Main.java:4: error: cannot find symbol
symbol: method containes(String)
部分文字列が含まれるか調べるメソッドです。containesは1文字多く、正しくはcontainsです。
直し方: containes を contains にします。
よくある誤解
IDEの補完を使っていると気づけません。補完なしで手打ちしたとき、まず大文字小文字を疑ってください。
まとめ
cannot find symbol (method)は初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。