私は割り当てに取り組んでいますが、このエラーに固執しています:最終的な変数カウントに値を割り当てることができません
ここに私のコードがあります...
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が初めてで、明らかにコンピューターの専門家ではないので、可能な限り簡単な言葉で問題/解決策を説明してください。ありがとうございました。
count++;
はエラーをスローします。オラクルごとに、
最終変数は1回しか割り当てられません。変数finalを宣言することは、その値が変わらないことを示す有用なドキュメントとして役立ち、プログラミングエラーを回避するのに役立ちます。
その記事に沿ってフォローできます here 。コードを見ると、count
を最終的にしたくないようです。プログラム全体でその値を変更できるようにする必要があります。修正は、final
修飾子を削除することです。
変数final
を宣言すると、基本的にこの変数は定数であり、変更されないことをコンパイラーに伝えます。 count
finalを宣言しましたが、まだ初期化(値を設定)していません。そのため、コンストラクターで値を設定することが許可されていましたpublic List() {}
:最終変数は一度初期化でき、その後は変更できません。
ただし、これには例外があります。たとえば、countのint値を使用してオブジェクトを作成し、セッターを追加した場合でも、最終的なオブジェクトを変更できます。
その例:
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
}
}
Countを最終変数として宣言したため、エラーがスローされます。最終的な変数は定数に他なりません。初期化された最終変数の値を変更することはできません。
「final」キーワードは定数として機能します。宣言時に値を割り当てたり、コンストラクタで値を割り当てたりすることができますが、それも一度だけです。コードのさらに下に値を含めることはできません。したがって、count ++はエラーを生成します。
また、クラスまたは関数で使用する場合、「最終」はサブクラスに継承されないことを知っています。