Code Fix

初級

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パッケージにあります。

直し方: ListScanner にします。

この問題を解いてみる →

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

パターン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()を使います。

直し方: nextLinenextInt にします。

この問題を解いてみる →

パターン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文字の違いでもパッケージごと見つからなくなります。

直し方: utilsutil にします。

この問題を解いてみる →

パターン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()を使います。

直し方: nextnextDouble にします。

この問題を解いてみる →

よくある誤解

importを足しても直らない場合は、クラス名の大文字小文字を疑ってください。scanner と Scanner は別物です。

まとめ

Scanner が使えないときの確認手順は初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

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