ciao, per prima cosa usa i tag code per inserire il codice nel post , altrimenti non si capisce nulla
codice:
public class Esercizio {
public static int x;
public final int[] y = new int[3];
public Esercizio(int x, int y0, int y1, int y2) {
Esercizio.x = x;
this.y[0] = y0;
this.y[1] = y1;
this.y[2] = y2;
}
public static void main(String[] args) {
int a = 0;
Esercizio[] q = new Esercizio[3];
q[0] = new Esercizio(0, 10 - a, 6 - a, 5 - a);
q[1] = new Esercizio(a, 4, 8, 10);
q[2] = new Esercizio(2 - a, a, a + 1, a + 2);
try {
System.out.println(q[a].y[x]);
} catch (Exception e) {
System.out.println("No!");
}
}
}
Per quanto riguarda il perché stampa 5 , mi sembra abbastanza semplice:
l'elemento stampato è q[a].y[x].
Ora tieni conto di queste considerazioni:
- a è stato inizializzato a zero (e così è rimasto)
- all'interno dell'oggetto Esercizio il campo y[i] viene inizializzato con l'argomento del costruttore in posizione i+1
- all'interno dell'oggetto Esercizio il campo statico x è inizializzato con il valore del primo argomento del costruttore
- il campo x, essendo statico, prende il valore passatogli con l'ultimo costruttore chiamato (se non conosci la differenza tra una variabile di istanza e una di classe studiaci un po su)
Perciò essendo a = 0 stiamo andando a stampare il campo y[2 - 0] del primo oggetto Esercizio (cioè q[0]), il quale è stato inizializzato con l'argomento in posizione (2 - 0) + 1 = 3 e quindi con il quarto argomento del costruttore q[0], che vale per l'appunto 5 - a = 5 - 0 = 5