2015-09-25 7 views
6

に値を代入することはできません。最終的変数countにエラー:私は割り当てに取り組んでいると私は、このエラーにこだわって、最終的な変数

を値を割り当てることはできません。ここに私のコードは、これまでのところ...

です
public class List 
{ 
    private final int Max = 25; 
    private final int count; 
    private Person list[]; 

    public List() 
    { 
     count = 0; 
     list = new Person[Max]; 
    } 

    public void addSomeone(Person p) 
    { 
     if (count < Max){ 
      count++; // THIS IS WHERE THE ERROR OCCURS 
      list[count-1] = p; 
     } 
    } 

    public String toString() 
    { 
     String report = ""; 

     for (int x=0; x < count; x++) 
      report += list[x].toString() + "\n"; 

     return report; 
    } 
} 

私は非常にJavaに新しく、明らかにコンピュータの騒動ではありませんので、可能な限り簡単な問題/解決策を説明してください。どうもありがとうございます。

+2

一度割り当てられると、「最終」変数は変更できません。 – rgettman

答えて

8

count++;はエラーとなります。 Oracleの場合、

A final variable may only be assigned to once. Declaring a variable final can serve as useful documentation that its value will not change and can help avoid programming errors.

この記事の続きはhereです。あなたのコードを見ると、実際にcountが最終的になることは望ましくないようです。あなたはプログラムを通してその価値を変えたいと思っています。修正はfinal修飾子を削除することです。

+1

実際にJava言語仕様を参照する唯一の答えです。 +1 –

+0

うわー、大丈夫です!本当にありがとう!!! – Kathryn

2

変数finalを宣言すると、基本的にこの変数が定数であり変更されないことがコンパイラに伝えられます。 count finalと宣言しましたが、まだ値を初期化(値を設定)していませんでした。そのため、コンストラクタで値を設定することが許可されたのですpublic List() {}:最終変数は一度初期化できますが、その後は変更できません。

例外はありますが、たとえば、int値がcountのオブジェクトを作成してセッターを追加した場合でも、最後のオブジェクトは変更できます。その

例:あなたは、最終的な変数としてカウント数を宣言しているので、

public class ExampleObject { 
    private int count; 

    public ExampleObject(int count) { 
     this.count = count; 
    } 

    public void setCount(int count) { 
     this.count = count; 
    } 

    public int getCount() { 
     return count; 
    } 
} 

public class ExampleDemo { 

    private static final ExampleObject obj = new ExampleObject(25); 

    public static void main(String[] args) { 
     obj = new ExampleObject(100); //not allowed: cannot assign a value to final variable 
     obj.setCount(100); //allowed 
    } 
} 
1

それがエラーを投げています。最終的な変数は定数だけです。最終変数が初期化されると、最終変数の値を変更することはできません。

関連する問題