Errore in compilazione su array

di il
10 risposte

Errore in compilazione su array

Posto il frammento di codice che mi dà errore:

public class Punto {
	private int dimensione;
	private int coordinate[];
	coordinate = new int[100];
...
...
Ottengo errore sul punto e virgola di

	private int coordinate[];
ma l'errore dipende dalla riga sotto, (coordinate = new int[100];) perchè se aggiungo un'altra istruzione tra le due, ad esempio:

public class Punto {
	private int dimensione;
	private int coordinate[];
        private int a;
	coordinate = new int[100];

l'errore viene segnalato su private int a; (sempre sul punto e virgola).
Non riesco a capire quale sia il problema... evidentemente molto banale... ma non lo vedo !
Mi potete aiutare?

10 Risposte

  • Re: Errore in compilazione su array

    Mi rispondo da sola.
    Ho cambiato il codice che ho postato sopra nella forma più contratta:
    
    public class Punto {
    	private int dimensione;
    	private int[] coordinate = new int[100]; 
    
    e l'errore è sparito.
    Resta da capire cosa non va nella prima versione...
  • Re: Errore in compilazione su array

    Quello che non va nella prima versione è la posizione delle parentesi quadre
  • Re: Errore in compilazione su array

    A dir la verità, prima di postare la domanda, avevo provato con ambedue le posizioni delle parentesi:
    
    private int coordinate[];
    coordinate = new int[100];
    
    e
    
    private int[] coordinate;
    coordinate = new int[100];
    
    ottenendo lo stesso errore.
    D'altra parte, leggo sul testo "oo_&&_java_5" di Claudio de Sio Cesari, a pag 111:
    char alfabeto []; oppure char [] alfabeto;
    ..
    In pratica, per dichiarare un array, basta posporre (oppure anteporre) una coppia di
    parentesi quadre all’identificatore.
    Quindi entrambe le dichiarazioni (parentesi quadre prima o dopo l'identificatore) sarebbero corrette, però nessuna delle due passa la compilazione....
  • Re: Errore in compilazione su array

    Hai ragione, è troppo presto ancora per me per ragionare

    Dunque, credo che l'errore stia nel fatto che hai dichiarato una variabile, indipendentemente dal fatto che sia un array, all'interno di una classe e poi l'hai inizializzata, cioè hai eseguito una istruzioni al di fuori di un metodo. Se non sbaglio in una classe tu puoi avere esclusivamente parametri, costruttori e metodi. Cioè non esiste che tu scriva altre istruzioni (fuori dai metodi). Non è che sia sicurissimo, ma solo perché non m'è mai venuto in mente di provarci XD concettualmente, a mio modo di vedere, è un errore. Non sono sicuro al 100% che lo sia anche per l'interprete. Ma al 90% diciamo...
  • Re: Errore in compilazione su array

    Hai ragione anche tu!
    all'interno di una classe non ha senso istanziare una variabile che invece dovrà essere istanziata quando verrà creato l'oggetto.
    Però allora mi dovrebbe dare errore anche
    
    private int[] coordinate = new int[100];
    
    che, in un colpo solo, dichiara ed istanzia l'array...
  • Re: Errore in compilazione su array

    Int a; //dichiarazione della variabile a

    a = 10; //assegnamento di un valore ad a

    int b = 10; //inizializzazione della variabile b (cioè dichiarazione più assegnamento)


    All'interno della classe ma al di fuori dei metodi, è consentita la dichiarazione e l inizializzazione, ma non l assegnamento.

    A dire il vero ci sarebbe un modo per avere l assegnamento nella classe ma al di fuori dei metodi..
    Se ti interessa te lo posto, si tratta dei blocchi di inizializzazione che vengono usati al posto dei costruttori, ma sono sconsigliabili perchè poco usati e meno intuitivi.
    All'università non li abbiamo studiati e sui libri da cui ho studiato java, vi era scritto che è meglio non usarli.
  • Re: Errore in compilazione su array

    Ecco come si usa il blocco di inizializzazione:
    
    public class Punto {
    
       int a;
       int b;
       { //inizio blocco
         a=1000;
         b=39;
       } //fine blocco
    
       ...
    }
    
    
    Oppure usa il costruttore (scelta preferibile):
    
    public class Punto {
    
       int a;
       int b;
    
       public Punto(){
          a=1000;
          b=39;
       }
    
    
    Le istruzioni del blocco di inizializzazione vengono eseguite quando l 'oggetto a cui appartengono viene costruito (in questo caso quando si fa: "Punto p= new Punto();"

    Esiste anche il blocco di inizializzazione statico:
    
    public class Prova{
    
      private static int a;
    
      static{ //inizio blocco
    
          a=28;
    
      }// fine blocco
    
      public static void main(String[] args){
        System.out.println(a+45);
      }
    
    }
    
    Detto questo, non ti ci fissare troppo su ste cose sono meccanismi sintattici evitati da praticamente tutti i programmatori, ma è bene conoscerli
    Se non sono stato chiaro, chiedi, e se posso aiuto!
    Ciao!
  • Re: Errore in compilazione su array

    Ti ringrazio.
    Quello che non capisco è perché il codice:
    
    private int[] coordinate;
    coordinate = new int[100];
    
    che dichiara e poi istanzia coordinate, dà errore in compilazone, mentre
    
    private int[] coordinate = new int[100];
    
    che dichiara e istanzia l'array in una sola istruzione, e che dovrebbe essere (sia sintatticamente che semanticamente) equivalente alla prima versione, non genera errore.
  • Re: Errore in compilazione su array

    In alcuni linguaggi di programmazione è molto pericoloso non fornire un valore iniziale alle variabili appena create. Quindi credo che java permetta

    private int[] coordinate = new int[100];

    per dare una certa libertà al programmatore.

    Daltronde se ad esempio hai solo quella variabile di istanza per una classe, quell'inizializzazione ti permette di non usare il costruttore (verrà comunque fornito quello di default in maniera automatica).

    Mi sembra di capire che ti chiedi perchè non ti lascia fare la stessa cosa ma in maniera spezzata,
    Ovvero:

    private int coordinate;
    coordinate = new int[100];

    Beh se questa assegnazione fosse possibile, allora dovrebbero essere possibili anche
    le seguenti istruzioni:

    private int coordinate;
    coordinate = new int[100];
    int a;
    a= 19;
    b=a;
    ecc...


    ma le variabili vanno modificate nei metodi ecc.. Quindi ciò non è possibile.
    Io penso sia per questo che java permetta la prima cosa, ma non la seconda..
    Riesco a spiegarmelo solo cosi, come se gli sviluppatori di Java hanno fatto un eccezione per l'inizializzazione, per venire incontro a programmatori abituati con altri linguaggi ecc..
    Se tu hai altre ipotesi, o se scopri ragioni tecniche per cui Java permette l'una e non l altra cosa, dimmelo che mi interessa
  • Re: Errore in compilazione su array

    Siccome mi sembra un discorso assurdo...si può sapere che errore ti dà?
Devi accedere o registrarti per scrivere nel forum
10 risposte