2015-09-25 82 views
6

我工作的分配和我卡在這個錯誤:不能將值分配給最終的變盤點錯誤:不能將值分配給最後一個變量

這是到目前爲止我的代碼...

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

一旦賦值,就不能修改'final'變量。 – 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,但你還沒有初始化(設置一個值)。這就是爲什麼你可以在你的構造函數中設置它的值: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 
    } 
} 
1

,因爲你已經宣佈數作爲最後的變量,它拋出錯誤。最終變量不過是常數。初始化後,我們無法更改最終變量的值。

相關問題