Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    5

    Problema con codice java

    Ciao a tutti! Sono nuovo nel forum e ho bisogno di capire un piccolo codice scritto in Java.

    Dato il seguente 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!"); }

    Perchè stampa il valore 5? Al di là dell'output, non riesco a capire il valore che prende la variabile statica x: qualcuno me lo può spiegare?

    Grazie in anticipo!
    W.O.R.A!!

  2. #2
    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
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    5
    Credo proprio che ripasserò le variabili statiche e non-statiche!!! Grazie mille!!
    W.O.R.A!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    In sintesi, possiamo dire che: di una variabile di istanza viene creata una copia ogni volta che viene istanziata la classe (ogni volta che crei un oggetto), invece, una variabile statica è comune a tutti.

    Ad una variabile statica si accede tramite il nome della classe alla quale appartiene; come noti, il primo parametro del costruttore riguarda proprio il valore che questa variabile, x, va ad assumere. Questa ogni volta che viene modificata cambia per tutti gli oggetti (visto che è comune a tutti); di conseguenza, l'ultimo valore che viene passato ad x è il 2, e la nostra a vale 0. Ergo, la posizione 2 di y è l'ultima (visto che gli array partono da 0).

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.