Valutazione codice Java

di il
11 risposte

Valutazione codice Java

Ciao a tutti, avrei bisogno di aiuto su alcuni esercizi di valutazione di codice Java. Ve ne posto uno, nel quale non riesco a capire bene l'esecuzione del programma dato (sono alle prime armi).
qualcuno saprebbe spiegarmi come ottengo i risultati richiesti?


public class PointS {
int x;
int y;

PointS(int x, int y) {
this.x=x;
this.y=y;
}

public static PointS[] makeArray (int n, PointS pt) {
PointS[] res= new PointS[n];
for (int i=0; i<n; i++) {
pt.x=pt.x+n;
pt.y=pt.y+n;
res=pt;
}
return res;
}


public static PointS sum(PointS[] a) {
PointS res =a[0];
for (int i=1; i<a.length; i++) {
res.x=res.x+a.x;
res.x=res.x+a.y;
}
return res;
}
}

Dopo l'esecuzione di:


PointS pt1= new PointS (3,3);
PointS pt2= PointS.sum(PointS.makeArray(2,pt1));

quanto valgono: pt1.x? pt1.y? pt2.x? pt2.y?

11 Risposte

  • Re: Valutazione codice Java

    morosito ha scritto:


    quanto valgono: pt1.x? pt1.y? pt2.x? pt2.y?
    Prova a dedurlo tu. Tenendo presente due aspetti rilevanti di makeArray: primo, non crea nuovi oggetti PointS (crea un nuovo array di n elementi PointS) e secondo, modifica lo "stato" dell'oggetto PointS ricevuto.
    Mentre per sum, idem non crea nuovi oggetti PointS mentre invece modifica lo "stato" del primo elemento dell'array.
  • Re: Valutazione codice Java

    Si si questi due aspetti mi sono chiari, però poi non mi trovo con i risultati finali che sono pt1.x=pt2.x=21 e pt1.y=pt2.y=7.

    makeArray, prende in input (2, pt1) quindi secondo il mio modo di ragionare crea un array "res" di elementi PointS di dimensione 2 nel quale res[0] punta ad un oggetto PointS con pt.x=pt.y=5 e invece res[1] punta ad un oggetto PointS con pt.x=pt.y= 7

    successivamente la funzione sum crea "PointS res" che prende i valori di a[0] e modifica res.x sommandogli prima a[1].x e poi a[1].y

    ma come vengono fuori quei valori???
  • Re: Valutazione codice Java

    morosito ha scritto:


    si si questi due aspetti mi sono chiari
    Allora dovrebbe esserti chiaro che di oggetti PuntoS ce n'è sempre e solo 1!

    morosito ha scritto:


    ma come vengono fuori quei valori???
    Cerca di ragionare in questo modo, prendiamo per esempio makeArray: dimentica per un attimo che alla fine avrai un array .... tanto ci saranno N elementi che faranno riferimento allo stesso oggetto PuntoS.

    Guarda solo
    pt.x=pt.x+n;
    pt.y=pt.y+n;

    Aggiorna sempre lo stesso oggetto, aggiungendo n ad x/y ogni volta.... e lo fa per n volte (per il for).
    Quindi se all'inizio x e y sono 3 e n è 2 .... alla fine l'oggetto cosa contiene?
  • Re: Valutazione codice Java

    Se somma 2 volte n (che vale 2) ad x e y, alla fine ottiene pt.x= 7 e pt.y= 7. Dico bene?
  • Re: Valutazione codice Java

    morosito ha scritto:


    se somma 2 volte n (che vale 2) ad x e y, alla fine ottiene pt.x= 7 e pt.y= 7. Dico bene?
    Esatto! Ora (in uscita da makeArray) hai un array di 2 elementi che fanno riferimento allo stesso identico oggetto con i valori che hai appena detto. E l'array viene passato al sum.
  • Re: Valutazione codice Java

    Si questo mi è chiaro... ma non mi è chiaro come escono alla fine (dopo aver eseguito anche sum) i risultati pt1.x=pt2.x= 21 e pt1.y=pt2.y=7 !!! secondo i miei calcoli dovrebbero uscire 19 e 5 e non 21 e 7! (se puoi, spiegami in dettaglio che succede dopo aver eseguito sum, altrimenti non capisco)
  • Re: Valutazione codice Java

    morosito ha scritto:


    ma non mi è chiaro come escono alla fine (dopo aver eseguito anche sum) i risultati pt1.x=pt2.x= 21 e pt1.y=pt2.y=7 !!!
    Il sum riceve 2 elementi, ripeto che sono sempre lo stesso medesimo oggetto.
    Il ciclo for si ripete solo una volta (i parte da 1). Vedi che sum usa diverse variabili: res, a[0], a ma è sempre lo stesso oggetto!

    Quindi potresti mentalmente riscrivere come se fosse:

    res.x=res.x+res.x;
    res.x=res.x+res.y;

    I valori iniziali del punto sono (7,7) e queste due righe vengono ripetute 1 volta sola. Quindi?
  • Re: Valutazione codice Java

    Ecco, io è qui che non mi trovo con il ragionamento.... abbiamo detto che makeArray crea un array di dimensione 2 e che somma sia a x che y (che valgono inizialmente 3) due volte il valore 2... però ad ogni iterazione nel ciclo for, l'ultima istruzione fa res= pt , quindi in res[0] ci dovrebbero essere i valori (5, 5) , mentre (7, 7) stanno in res[1]. però ragionando così i conti poi non tornano quando faccio le somme dentro sum... quindi sbaglio proprio ad interpretare l'ultima istruzione nel for nella funzione makeArray !!
  • Re: Valutazione codice Java

    morosito ha scritto:


    l'ultima istruzione fa res= pt , quindi in res[0] ci dovrebbero essere i valori (5, 5) , mentre (7, 7) stanno in res[1].

    No, è sempre lo stesso identico oggetto!
  • Re: Valutazione codice Java

    Ok... si lo so che è sempre lo stesso oggetto, ma seguendo le istruzioni del ciclo for mi veniva da pensare che in res[0] ci fosse (5,5) e non (7,7). in ogni caso, ti ringrazio per la pazienza e l'aiuto!
  • Re: Valutazione codice Java

    CROSSPOSTING.
Devi accedere o registrarti per scrivere nel forum
11 risposte