Code Fix

初級

variable is already defined の原因と直し方

同じスコープでの再宣言。値の変更と宣言の違いを、引数とループ変数の例で確認します。

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

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

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

パターン1

 1  public class Main {
 2      public static void main(String[] args) {
 3          int count = 1;
 4          int     count = 2;
               ^
 5          System.out.println(count);
 6      }
 7  }
Main.java:4: error: variable count is already defined in method main(String[])

同じスコープで同じ名前を2回宣言することはできません。値を変えるだけなら型を書きません。

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

この問題を解いてみる →

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

パターン2

 1  public class Main {
 2      static void show(int n) {
 3          int        n = 10;
                 ^
 4          System.out.println(n);
 5      }
 6      public static void main(String[] args) {
 7          show(1);
 8      }
 9  }
Main.java:3: error: variable n is already defined in method show(int)

引数もそのメソッドのスコープに属する変数です。同じ名前で再宣言はできません。

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

この問題を解いてみる →

パターン3

 1  public class Main {
 2      public static void main(String[] args) {
 3          for (int i = 0; i < 3; i++) {
 4              int       i = 0;
                    ^
 5              System.out.println(i);
 6          }
 7      }
 8  }
Main.java:4: error: variable i is already defined in method main(String[])

外側のforで宣言したiは、その中の波括弧内でも有効です。同じ名前で再宣言することはできません。

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

この問題を解いてみる →

パターン4

 1  public class Main {
 2      public static void main(String[] args) {
 3          int total = 0;
 4          if (total == 0) {
 5              int       total = 5;
                    ^
 6              System.out.println(total);
 7          }
 8      }
 9  }
Main.java:5: error: variable total is already defined in method main(String[])

if文のブロックの中も外側と同じスコープの続きです。内側で外側と同じ名前を再宣言することはできません。

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

この問題を解いてみる →

パターン5

 1  public class Main {
 2      static void loop(int i) {
 3          for (int       i = 0; i < 3; i++) {
                     ^
 4              System.out.println(i);
 5          }
 6      }
 7      public static void main(String[] args) {
 8          loop(1);
 9      }
10  }
Main.java:3: error: variable i is already defined in method loop(int)

引数もそのメソッドのスコープに属します。for文の中で同じ名前を再宣言することはできません。

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

この問題を解いてみる →

よくある誤解

値を変えるだけなら型を書き直す必要はありません。型を書くと、同じ名前の別の変数が生まれます。

まとめ

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

演習をはじめる

関連するエラー

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