我正在完成一项任务,并且我遇到了这个错误:无法为最终变量计数分配值
到目前为止,这是我的代码......
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很新,显然不是计算机专家,所以请用最简单的术语解释问题/解决方案。非常感谢你。
答案 0 :(得分:10)
Property 'result' does not exist on type 'EventTarget'
会抛出错误。每个Oracle,
最终变量只能分配一次。声明变量final可以作为有用的文档,它的值不会改变,可以帮助避免编程错误。
您可以按照该文章here进行操作。看看你的代码,似乎你真的不希望count++;
成为最终的。您希望能够在整个程序中更改其值。修复方法是删除count
修饰符。
答案 1 :(得分:3)
当您声明变量final
时,您基本上告诉编译器此变量是常量且不会更改。你声明count
是最终的,但你还没有初始化(设置一个值)。这就是为什么允许您在构造函数public List() {}
中设置它的值:最终变量可以初始化一次,之后,它们无法修改。
但是有一些例外情况,例如,如果您创建了一个int值为count的对象,并添加了一个setter,那么您仍然可以修改最终对象。
示例:
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
}
}
答案 2 :(得分:1)
抛出错误是因为您已将count声明为最终变量。最终变量只不过是常量。初始化后,我们无法更改最终变量的值。
答案 3 :(得分:0)
'final'关键字用作常量。您可以在声明中然后在那儿分配一个值,也可以在构造函数中分配一个值,但只能分配一次。您无法在代码下方进一步增加其值。因此count ++将产生错误。
还知道,“最终”与类或函数一起使用时,会阻止它们被继承到子类中。
答案 4 :(得分:0)
有一种方法,您可以使用数组而不是变量,并使用其第一个元素。
final int[] a = new int[0];