Metodo che non capisco

di il
2 risposte

Metodo che non capisco

Buon pomeriggio a tutti.
Ho bisogno, come già altre volte, di un Vostro aiuto.
Sto, da pensionato anziano, cercando di studiare Java da autodidatta su alcuni testi.
Ecco il mio problema, credevo di aver appreso tutto su i metodi in Java, poi mi si presenta un esercizio che non so proprio capire, eccolo:
 /*Creare una classe Risultato che dichiara una sola variabile d’istanza
 di tipo float di nome risultato . Aggiungere eventuali metodi e costruttori utili. */

public class Risultato {    // classe Risultato
    public float risultato;    // variabile d'istanza di tipo "float" 
    public Risultato (float risultato) {       // metodo costruttore 
        this.risultato=risultato;
    }
    public void stampa() {                // metodo stampa() 
        System.out.println(risultato);
    }
}

/*Creare una classe CambiaRisultato che dichiara un metodo
public di nome cambiaRisultato() che prende in input un oggetto di tipo
Risultato e ne modifica la variabile interna risultato sommandola con un altro valore.*/

public class CambiaRisultato {    // classe CambiaRisultato     
    public void cambiaRisultato (Risultato risultato) {            // metodo cambiaRisultato()
        risultato.risultato += 1F;
    }
}

/*  Creare una classe con un metodo main() di nome TestRisultato che
stampi la variabile risultato di un oggetto di tipo Risultato , prima e dopo che
questo oggetto sia passato in input al metodo cambiaRisultato() di un oggetto
di tipo CambiaRisultato . */

public class TestRisultato {   // classe TestRisultato

    public static void main(String args[]) {    //  metodo main()      

        Risultato risultato = new Risultato(5.0F);      // 1° oggetto "risultato" 

        risultato.stampa();
// =================

        CambiaRisultato cr = new CambiaRisultato();    // 2° oggetto " cr" 
        
        cr.cambiaRisultato(risultato);  //  Invoca il metodo cambiaRisultato(risultato);
        
        risultato.stampa();   // Invoca il metodo stampa():
    }
}

Ecco il mio problema, penso di aver capito abbastanza su i metodi che usano dati primitivi, 
mi si presenta un metodo che usa dati non primitivi (un oggetto) e sono andato in tilt.

Se qualche brava persona mi sapesse spiegare sia la creazione del metodo metodo cambiaRisultato() e
la sua invocazione Le sarei molto grato.
(Scusate la mia inesperienza che vi farà sicuramente ridere.

marco mascardi

2 Risposte

  • Re: Metodo che non capisco

    Marco Mascardi ha scritto:


    Ecco il mio problema, penso di aver capito abbastanza su i metodi che usano dati primitivi,
    mi si presenta un metodo che usa dati non primitivi (un oggetto) e sono andato in tilt.
    In Java il passaggio degli argomenti è sempre per VALORE. Nel caso di primitivi viene passata una copia del valore numerico/boolean stesso. Nel caso dei tipi reference (oggetti), viene passata una copia del reference (cioè il riferimento) all'oggetto.

    Nel codice postato viene creato 1 solo oggetto Risultato, è quel new Risultato(5.0F). Non ce ne sono altri.
    La invocazione di cr.cambiaRisultato(risultato) fa sì che il parametro 'risultato' riceva lo stesso valore (una copia appunto) della variabile 'risultato' del main.
    Quindi il metodo cambiaRisultato ha "in mano" lo STESSO oggetto Risultato che hai creato nel main. E siccome l'oggetto Risultato ha un campo pubblico 'risultato', il metodo cambiaRisultato PUÒ alterarlo, aggiungendo 1 (float).
    Pertanto viene cambiato lo "stato" dell'oggetto e poi dal main questo cambiamento lo "vedi" ristampandolo con quel stampa() .
  • Re: Metodo che non capisco

    Per andbin:
    Sei stato molto gentile a rispondermi, ti ringrazio.
    Ora devo studiare la tua risposta, penso comunque di aver migliorato la mia concezione sui metodi.
    Ancora grazie.
    marco mascardi
Devi accedere o registrarti per scrivere nel forum
2 risposte