2015-09-25 19 views
6

Sto lavorando su un incarico e mi sono bloccato in questo errore: non è possibile assegnare un valore alla variabile conteggio finaleerrore: non si può assegnare un valore alla variabile finale

Ecco il mio codice finora ...

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

Sono molto nuovo a java e ovviamente non sono un mago del computer quindi per favore spiega il problema/soluzione nei termini più semplici possibili. Grazie mille.

+2

Una volta assegnate, le variabili 'final' non possono essere modificate. – rgettman

risposta

8

count++; genera un errore. 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.

È possibile seguire insieme l'articolo here. Guardando il tuo codice, sembra che tu non voglia davvero che count sia definitivo. Vuoi essere in grado di cambiare il suo valore in tutto il programma. La soluzione sarebbe rimuovere il modificatore final.

+1

Questa è l'unica risposta qui che effettivamente fa riferimento alla specifica del linguaggio Java. +1 –

+0

Wow fantastico, ho capito! Grazie mille!!! – Kathryn

2

Quando si dichiara una variabile final si indica sostanzialmente al compilatore che questa variabile è costante e NON cambierà. Hai dichiarato count finale, ma non l'hai ancora inizializzato (imposta un valore). È per questo che ti è stato permesso di impostare il valore nel tuo costruttore public List() {}: le variabili finali possono essere inizializzate una volta e, successivamente, non possono essere modificate.

Ci sono delle eccezioni a questo però, se per esempio si creasse un oggetto con un valore int di conteggio e si aggiungesse un setter, si sarebbe comunque in grado di modificare l'oggetto finale.

esempio di questo:

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

Si sta gettando errore perché si è dichiarato conta come una variabile finale. Le variabili finali non sono altro che costanti. Non possiamo cambiare il valore di una variabile finale una volta inizializzata.

Problemi correlati