Scanner が使えないときの確認手順
importの必要性、System.inの渡し方、nextIntとnextLineの型の違いを順に確認します。
エラーメッセージの読み方
Main.java:5: error: cannot find symbol
Main.java- ファイル名
5- 行番号 — javacが異常に気づいた位置。原因の行とは限りません
error- 種別 — コンパイルエラー。実行まで到達しません
cannot find symbol- 内容 — javacが期待していたもの、または見つけられなかったもの
このエラーが出る典型パターン
パターン1
1 import java.util.List ; ^ 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner sc = new Scanner(System.in); 6 System.out.println(sc.nextLine()); 7 } 8 }
Main.java:5: error: cannot find symbol
symbol: class Scanner
java.lang以外のクラスは使う前にimportが必要です。Scannerはjava.utilパッケージにあります。
直し方: List を Scanner にします。
広告
広告スロット(未設定)
パターン2
1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner sc = new Scanner( ); ^ 6 System.out.println(sc.nextLine()); 7 } 8 }
Main.java:5: error: no suitable constructor found for Scanner()
Scannerは読み取り元を渡して作ります。キーボード入力は System.in です。
直し方: (空) を System.in にします。
パターン3
1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner sc = new Scanner(System.in); 6 int n = sc.nextLine (); ^ 7 System.out.println(n * 2); 8 } 9 }
Main.java:6: error: incompatible types: String cannot be converted to int
nextLine()は文字列を返します。数値として読むには型に合ったnextInt()を使います。
直し方: nextLine を nextInt にします。
パターン4
1 import java.utils .Scanner; ^ 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner sc = new Scanner(System.in); 6 System.out.println(sc.nextLine()); 7 } 8 }
Main.java:1: error: package java.utils does not exist
正しいパッケージ名はjava.utilです(複数形のsは付きません)。1文字の違いでもパッケージごと見つからなくなります。
直し方: utils を util にします。
パターン5
1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner sc = new Scanner(System.in); 6 double price = sc.next (); ^ 7 System.out.println(price * 2); 8 } 9 }
Main.java:6: error: incompatible types: String cannot be converted to double
next()は文字列を返します。小数として読み取るには、型に合ったnextDouble()を使います。
直し方: next を nextDouble にします。
よくある誤解
importを足しても直らない場合は、クラス名の大文字小文字を疑ってください。scanner と Scanner は別物です。
まとめ
Scanner が使えないときの確認手順は初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。