2015-09-25 11 views
6

ich an einer Aufgabe arbeite, und ich bin auf diesem Fehler fest: kann keinen Wert auf endgültige variable ZählungFehler: kann keinen Wert auf endgültige Variablen zuweisen

Hier ist so weit mein Code zuweisen ...

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; 
    } 
} 

Ich bin sehr neu in Java und bin offensichtlich kein Computer-Whiz also bitte erklären Sie das Problem/Lösung in den einfachsten Begriffen möglich. Ich danke dir sehr.

+2

Nach der Zuweisung 'final' Variablen nicht geändert werden kann. – rgettman

Antwort

8

count++; wird einen Fehler werfen. Per 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.

Sie können mit diesem Artikel here folgen zusammen. Mit Blick auf den Code, so scheint es, dass Sie wirklich nicht count endgültig sein wollen. Sie möchten den Wert im gesamten Programm ändern können. Die Lösung wäre, den Modifikator final zu entfernen.

+1

Dies ist die einzige Antwort, hier die tatsächlich die Java Sprache Spec verweist. +1 –

+0

Wow toll, ich verstehe! Vielen Dank!!! – Kathryn

2

Wenn Sie eine Variable deklarieren final Sie im Grunde den Compiler sagen, dass diese Variable konstant und wird sich nicht ändern. Sie erklärt count final, aber Sie es nicht initialisiert war noch (auf einen Wert). Aus diesem Grund durften Sie den Wert in Ihrem Konstruktor public List() {} festlegen: Endgültige Variablen können einmal initialisiert und anschließend nicht mehr geändert werden.

Es gibt jedoch Ausnahmen, wenn Sie zum Beispiel ein Objekt mit dem int-Wert count erstellt und einen Setter hinzugefügt hätten, könnten Sie das endgültige Objekt trotzdem ändern.

Beispiel dafür:

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

Es wirft Fehler, weil Sie gelten als eine letzte Variable deklariert haben. Endgültige Variablen sind nichts als Konstanten. Wir können den Wert einer endgültigen Variablen nach der Initialisierung nicht ändern.

Verwandte Themen