Programmino Rettangolo, problema con una funzione.

di il
5 risposte

Programmino Rettangolo, problema con una funzione.

Ciao a tutti, ho scritto un programma, ma ho un problema con la funzione raddoppiaDimensioni. Il programma è compilato correttamente, ma quando lo eseguo, quando dovrebbe darmi a e b raddoppiate, non lo fa, ma mi restituisce semplicemente 4.0 e 5.0. dove sbaglio?
vi ringrazio a quanti si interesseranno.

public class Rettangolo {
static void raddoppiaDimensioni (double x, double y){
x*=2;
y*=2;
System.out.println("L'area del rettangolo avente dimensioni raddoppiate è"+ x*y);
}
public static void main(String[] args) {
double a = 4.0;
double b = 5.0;
System.out.println("a prima di raddoppiarlo vale"+ a);
System.out.println("b prima di raddoppiarlo vale"+ b);
raddoppiaDimensioni(a, b);
System.out.println("a dopo la funzione raddoppiaDimensioni vale" + a);
System.out.println("b dopo la funzione raddoppiaDimensioni vale" + b);
}
}

5 Risposte

  • Re: Programmino Rettangolo, problema con una funzione.

    E' un problema che nasce dal passaggio dei parametri, quando passi dei tipi primitivi viene fatto una copia del valore al loro interno, quindi qualunque modifica apportato ai paraemtri formali rimane all'interno del metodo che vengono persi quando esci dal metodo chiamato, un trucchetto potrebbe essere quello di inserire x, y in un array dim[2], dove associ dim[0] a x e dim[1] a y, e quando passi un array o qualunque tipo di oggetto viene passato per riferimento e quindi tutte le modifiche apportate sono fatte direttamente all'oggetto e rimane anche all'uscita dal metodo.
    In alternativa potresti usare un metodo poco ortodosso, dichiarando una nuova variabile chiamato doppiaSomma, e al metodo radoppiaDimensione fai restituire la somma di x e y radoppiati, il ritorno sara memorizzato in doppiaSomma
    da cui per recuperare la nuova dimensioe bastera fare
    x = doppiaSomma - (y *2);
    y = doppiaSomma - (x*2);
    ma non ha nessun senso.
  • Re: Programmino Rettangolo, problema con una funzione.

    Ti ringrazio davvero, sei stato molto esaustivo, ma non sono molto pratico con gli array, potresti farmi vedere un esempio del loro utilizzo?
    grazie
  • Re: Programmino Rettangolo, problema con una funzione.

    Ciao jekkos,
    oltre al sistema consigliato da Lysz210 potresti anche considerare la possibilità di lavorare direttamente su un rettangolo invece che passare le sue dimensioni, ad esempio:
    
    public class Rettangolo 
    {
        public double Lunghezza;
        public double Altezza;
    	
        public static void RaddoppiaDimensioni(Rettangolo r)
        {
            r.Lunghezza *= 2;
            r.Altezza *= 2;
        }
    }
    
    public static void main(String[] args) 
    {
         Rettangolo r = new Rettangolo();
         r.Lunghezza = 10;
         r.Altezza = 7;
         
         Rettangolo.RaddoppiaDimensioni(r);
         // adesso r.Lunghezza e r.Altezza sono raddoppiate
    }
    
    In questo caso dato che si passa un riferimento al rettangolo il tutto funziona.
  • Re: Programmino Rettangolo, problema con una funzione.

    Il sistema spiegato da Barba e' la soluzione migliore in assoluto perche' hai gia una rappresentazione di un oggetto con le dimensioni.
    In ogni caso rispondo alla tua domanda e in piu' di consiglierei di approfondire direttamente anche con google per seguire qualche tutorial con esercizi diversi per fare pratica.
    Un array e' un insieme sequenziale di dati omogeneo, indicizzato a partire da 0 che corrisponde al suo primo elemento. Pensado a come cercare di spiegartelo sono andato a sbirciare su wikipedia ed e' molto migliore di me questo e' il link
    http://it.wikipedia.org/wiki/Array_in_Jav
    In piu' ti posso aggiungere che un array essendo un oggeto quando usi l'operatore = non fai una copia ma semplicemente dici al secondo che punti allo stesso oggetto del primo, e per copiare devi o farlo manualmente o richiamare il metodo arraycopy di System, e' molto interessante il foreach come ciclo iteratittivo per la visualizzazione e l'uso in lettura degli array.
    
    // dichiarazione di un array va fatto con le parentesi []
    int array[], dimensioni = 3; // dimensioni non e' un array perche non ha le []
    int[] array2, array3;   // in questo caso quando le [] sono vicine al tipo tutte le variabile diventeranno array
    
    array = new array[dimensioni];   // cosi inizializzi l'array
    /* attenzione che non stai inizializzando gli elementi dell'array ma 
    solo dichiarando di quanti elementi dovra' essere composto
    per l'inizializzazione degli elementi dovrai farlo manualmente con dei cicli */
    // facciamo facciamo finta che array sia inizializzato con { 1, 2, 3 }
    array2 = array;   // qui non e' vero che avro 2 array distinte
    array[0] = 4;   // sto dicendo che deve inserire il valore 4 all'elemento 0
    boolean uguale = ( array[0] == array1[0] );   // questa istruzione mi dara true perche sia array che array1 sono in realta lo stesso oggetto
    array3 = new array[3];
    for( int i=0; i < arra3.length; i++ ) array[i] = i + 10;   // inizializzo
    foreach( int x: array3 ) System.out.print( x + "\t" );    // esempio di visualizzazione con foreach
    
  • Re: Programmino Rettangolo, problema con una funzione.

    Grazie davvero a entrambi!
Devi accedere o registrarti per scrivere nel forum
5 risposte