Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    118

    Java: scambio di elementi

    Salve ai cervelloni del forum, avrei una domanda che mi preme molto dato che domani ho esame e dovrei giustificarla al meglio.

    Io ho il seguente programma:

    codice:
    //metodo 1
    public static void swap( int[] arr1, int[] arr2) {
    int [] help;
    help = arr1;
    arr1 = arr2;
    arr2 = help;
    }
    
    //metodo 2
    public static void swapEl( int[] arr1, int[] arr2) {
    int help;
    for(int i=0; i<arr1.length; i++) {
    help = arr1[i];
    arr1[i] = arr2[i];
    arr2[i] = help;
    }
    }
    
    // stampa
    public static void stampaArr(int[] arr) {
    for( int i=0; i<arr.length; i++)
    System.out.println(arr[i]);
    System.out.println(“ “);
    }
    
    // main
    public static void main(String[] args) {
    int [] a = { 5,4,3,2,1,0 }; int [] b = {12,11,10,9,8,7};
    swap (a,b);
    stampaArr(a);
    stampaArr(b);
    swapEl (a,b);
    stampaArr(a);
    stampaArr(b);
    }

    Ora, in teoria il primo metodo non dovrebbe scambiare gli elementi mentre il secondo sì.
    Sapete giustificarmi al meglio la risposta? Purtroppo non ho trovato molte info a riguardo.


    Vi ringrazio

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    118
    Lo scambio con successo o meno ho visto che uccupa anche singoli elementi come interi (e non array). La causa è sempre la stessa?

  3. #3
    codice:
    //metodo 1
    public static void swap( int[] arr1, int[] arr2) {
    int [] help;
    help = arr1;
    arr1 = arr2;
    arr2 = help;
    }
    
    //metodo 2
    public static void swapEl( int[] arr1, int[] arr2) {
    int help;
    for(int i=0; i<arr1.length; i++) {
    help = arr1[i];
    arr1[i] = arr2[i];
    arr2[i] = help;
    }
    }
    Devi tenere presente che in java i parametri di un metodo sono degli
    alias della variabile passata come argomento,in altre parole e come se fossero diversi nomi dello stesso oggetto (e un array è un oggetto),quindi modificando attraverso uno degli alias qualche campo dell'oggetto le modifiche sono permanenti,modificando invece solo l'alias ottieni solo che l'alias non "punti" più a qeull'oggetto ma non hai apportato modifiche all'oggetto stesso.Pertanto se tu scambi questi "nomi",essendo i parametri attuali di fatto delle variabili locali al metodo,questo avrà effetto solo all'interno del metodo e le cose torneranno esattamente com'erano al suo termine,se invece (come nel secondo metodo) vai a scambiare gli array elemento per elemento stai modificando i "campi" dell'oggetto array e le modifiche saranno permanenti anche al termine del metodo.
    Ciauz
    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.)

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    118
    Ti ringrazio, sei stato chiarissimo

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    Se hai fatto il c ti rendi conto che passi l'indirizzo dell'array a un riferimento e la stessa cosa aviene anche in java

  6. #6
    Ho fatto del mio meglio per esserlo.Di niente comunque, ciao
    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.)

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 © 2025 vBulletin Solutions, Inc. All rights reserved.