Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Problema con un metodo di gestione array (molto semplice)

    Ciao a tutti

    Vorrei fare un metodo avente come parametri espliciti due array (a e b) che dia come valore di ritorno un array che sia identico all'array tra a e b più capiente (per intenderci, con più disponibilità di spazio per contenere variabili, con un numero di indice massimo più grande).

    Molto semplicemente ho pensato a questo:

    codice:
    public static int [] arrayMax(int[]a, int[]b){
            if (a.length>b.length){
                a=b;
                b=a;
            }
            return b;
        }

    L'algoritmo ragiona nel seguente modo: b viene considerato il più capiente. Se è così realmente, il programma ritorna direttamente b, altrimenti (condizione if) vengono cambiati i riferimenti ai due array, e così il ragionamento per b va ancora bene.

    O meglio, dovrebbe! Perché a quanto pare non funziona proprio così. Alla fine il metodo, anche dopo essere entrato nell'if, ritorna comunque un array identico a b (qualsiasi sia la lunghezza di b rispetto ad a).

    Qualcuno mi sa gentilmente spiegare perché non funziona? Che alternative altrettanto brevi ci sarebbero?

    Grazie mille

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Java è pass-by-value, questo significa che per gli array passa solo il riferimento cioè tu puoi cambiare i valori al suo interno ma non il puntatore, fai qualcosa del genere:
    codice:
    public static int [] arrayMax(int[]a, int[]b){
            return a.length > b.length ? a : b;
        }

  3. #3
    Quote Originariamente inviata da RoTeam Visualizza il messaggio
    Java è pass-by-value, questo significa che per gli array passa solo il riferimento cioè tu puoi cambiare i valori al suo interno ma non il puntatore, fai qualcosa del genere:
    codice:
    public static int [] arrayMax(int[]a, int[]b){
            return a.length > b.length ? a : b;
        }
    Purtroppo a livello didattico non sono ancora arrivato al significato dell'istruzione ? a:b.
    In qualunque caso, mi è stata consigliata la seguente alternativa (la tua è sicuramente più breve, scrivo comunque nel caso qualcuno fosse interessato e come me non conosce quella notazione):

    codice:
    public static int [] arrayMax(int[]a, int[]b){
          if (a.length>b.length){
                int [] temp = null;
                temp = a;
                a = b;
                b = temp;
          }
          return b;
    }

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Giammarco18 Visualizza il messaggio
    In qualunque caso, mi è stata consigliata la seguente alternativa
    La tua alternativa ha poco senso. Non devi "scambiare" un bel niente. Se la lunghezza di a è maggiore della lunghezza di b, allora restituisci a altrimenti (else) restituisci b. Se entrambi hanno lunghezza uguale, puoi stabilire tu quale dei due restituire.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    Quote Originariamente inviata da Giammarco18 Visualizza il messaggio
    Ciao a tutti
    codice:
    public static int [] arrayMax(int[]a, int[]b){
            if (a.length>b.length){
                b=a;
            }
            return b;
        }
    tolto il primo scambio che non ha senso. Comunque mettici direttamente un return a; else return b;. Cambiare il valore delle variabili passate come parametro per fare questa cosa non mi sembra il caso.

Tag per questa discussione

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.