Passare variabili contenute in metodi diversi ad un solo sottoprogramma

di il
12 risposte

Passare variabili contenute in metodi diversi ad un solo sottoprogramma

Ciao a tutti, volevo chiedere, come posso passare 12 variabili diverse, contenute in 12 metodi diversi ad un solo metodo?
Grazie in anticipo per l'aiuto, ditemi se non sono stato chiaro...

12 Risposte

  • Re: Passare variabili contenute in metodi diversi ad un solo sottoprogramma

    No, purtroppo non è affatto chiaro.

    E comunque: se un metodo X ha una variabile "locale", nessun altro metodo può "vedere" né accedere a quella variabile (appunto è locale solo a quel metodo).
    L'unica cosa che il metodo X può fare è assegnare il valore di quella variabile altrove (a qualunque altra variabile accessibile) o passare sempre il suo valore ad un metodo(/costruttore) accessibile.
  • Re: Passare variabili contenute in metodi diversi ad un solo sottoprogramma

    andbin ha scritto:


    No, purtroppo non è affatto chiaro.

    E comunque: se un metodo X ha una variabile "locale", nessun altro metodo può "vedere" né accedere a quella variabile (appunto è locale solo a quel metodo).
    L'unica cosa che il metodo X può fare è assegnare il valore di quella variabile altrove (a qualunque altra variabile accessibile) o passare sempre il suo valore ad un metodo(/costruttore) accessibile.
    Allora, cerco di spiegarmi meglio, ho creato questo progetto dove ho 13 metodi, il main più altri 12 metodi (uno per ogni mes dell'anno) che si occupano di fare svariati calcoli per il mese specifico che trattano (esempio: il metodo public static void guadagniGennaio calcola il TOTALE, la media, il più alto ed il più basso dei guadagni avvenuti nel mese di Gennaio; il metodo public static void guadagniFebbraio calcola il TOTALE, la media, il più alto ed il più basso dei guadagni avvenuti nel mese di Febbraio etc...). Avrei bisogno di passare le 12 variabili locali di tipo double totaleGuadagni di ogni mese ad un ulteriore metodo che si occupi poi di sommarle, avendo così il totale dei guadagni conseguiti in un anno.
    Spero di essere stato chiaro...
  • Re: Passare variabili contenute in metodi diversi ad un solo sottoprogramma

    Innanzitutto, oltre a quanto detto prima, naturalmente un metodo può anche restituire un valore, in generale.

    Comunque, prima questione: hai veramente bisogno di un metodo per mese? Fanno davvero cose molto diverse .... o cose molto simili che potresti "accomunare" in qualche modo? Lo devi sapere e saper valutare tu.

    Secondo, anche ammesso di dover fare 12 metodi, puoi far restituire da ciascuno il valore che poi il chiamante (il main ?) potrebbe usare per altro?
  • Re: Passare variabili contenute in metodi diversi ad un solo sottoprogramma

    andbin ha scritto:


    Innanzitutto, oltre a quanto detto prima, naturalmente un metodo può anche restituire un valore, in generale.

    Comunque, prima questione: hai veramente bisogno di un metodo per mese? Fanno davvero cose molto diverse .... o cose molto simili che potresti "accomunare" in qualche modo? Lo devi sapere e saper valutare tu.

    Secondo, anche ammesso di dover fare 12 metodi, puoi far restituire da ciascuno il valore che poi il chiamante (il main ?) potrebbe usare per altro?
    In realtà fanno praticamente la stessa cosa, praticamente cambia solo la durata di ogni ciclo (quello di gennaio cicla per tutto un array di 31, quello di febbraio cicla per tutto un array di 28 etc), creare un metodo per mese era semplicemente il modo più ordinato di fare le cose per me...

    Non posso fargli restituire un valore al main perché mi servono come "blocco di codice" che compie più azioni, se dovessi farle restituire un valore perderebbero la loro natura...
  • Re: Passare variabili contenute in metodi diversi ad un solo sottoprogramma

    Luca Rossi ha scritto:


    creare un metodo per mese era semplicemente il modo più ordinato di fare le cose per me...
    Usa delle variabili globali...
  • Re: Passare variabili contenute in metodi diversi ad un solo sottoprogramma

    Luca Rossi ha scritto:


    creare un metodo per mese era semplicemente il modo più ordinato di fare le cose per me...
    "nì", sì e no ... dipende. Bisognerebbe vedere cosa/quanto fanno.

    Luca Rossi ha scritto:


    Non posso fargli restituire un valore al main perché mi servono come "blocco di codice" che compie più azioni, se dovessi farle restituire un valore perderebbero la loro natura...
    Detto così vuol dire poco/nulla ... o perlomeno è poco chiaro.


    P.S. mostra del codice.
  • Re: Passare variabili contenute in metodi diversi ad un solo sottoprogramma

    Io non sono esperto perchè sto ancora imparando (e la strada credo sarà lunghissima), però ho affrontato bene (almeno credo) la parte riguardante gli array e i costrutti di ciclo (while / for / do-while) e il tuo mi sembra un problema che si affronta per bene con queste due cose (poi, ovviamente, non sapendo esattamente quello che devono fare quei metodi non lo posso certo dire con assoluta certezza)... però hai scritto che devono fare sempre la stessa cosa e che cambia solo il numero di iterazioni.

    Quindi io opterei per qualcosa di questo tipo (che spreca un po' di posizioni della matrice che non vengono usate, ma magari ti semplifica un po' il problema):
    
    // All'interno della classe (al di fuori dei metodi) dichiari una matrice "calendario" che rappresenta tutto il tuo anno
    int[][] calendario = new int[12][31];
    
    // E dichiari un array con il numero di giorni per ciascun mese dell'anno (non saprei come potresti trattare il caso dell'anno bisestile)
    int[] giorniMese = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    
    // Nel main
    public static void main(String[] args) {
        // Istruzioni prima dei calcoli
        for(int i=0; i<12; i++) {
            faiQualcosa(calendario, i, giorniMese[i]);   // Richiama il metodo che eseguirà i tuoi calcoli sul mese i-esimo
        }
        // Istruzioni dopo i calcoli
    }
    
    // Questo metodo (uno solo!) esegue i calcoli su ciascun mese dell'anno
    // con la lunghezza giusta per quel mese
    void faiQualcosa(int[][] cal, int mese, int numeroGiorni) {
       // Eventuali operazioni da fare prima
       for(int i=0; i<numeroGiorni; i++) {
          cal[mese][i] = tuocalcolo;   // se devi calcolare un valore per ciascun giorno
       }
       // Eventuali operazioni da fare dopo
    }
    
    Ovviamente quelli più esperti di me sapranno darti soluzioni migliori e più efficienti, ma questo è ciò che è venuto in mente a me.
  • Re: Passare variabili contenute in metodi diversi ad un solo sottoprogramma

  • Re: Passare variabili contenute in metodi diversi ad un solo sottoprogramma

    andbin ha scritto:


    Luca Rossi ha scritto:


    creare un metodo per mese era semplicemente il modo più ordinato di fare le cose per me...
    "nì", sì e no ... dipende. Bisognerebbe vedere cosa/quanto fanno.

    Luca Rossi ha scritto:


    Non posso fargli restituire un valore al main perché mi servono come "blocco di codice" che compie più azioni, se dovessi farle restituire un valore perderebbero la loro natura...
    Detto così vuol dire poco/nulla ... o perlomeno è poco chiaro.


    P.S. mostra del codice.
    Appena posso ti mostro il codice allora Andbin, te lo volevo risparmiare dato che è un po' lungo e scritto su diverse classi...
  • Re: Passare variabili contenute in metodi diversi ad un solo sottoprogramma

    SpiritoLibero ha scritto:


    Io non sono esperto perchè sto ancora imparando (e la strada credo sarà lunghissima), però ho affrontato bene (almeno credo) la parte riguardante gli array e i costrutti di ciclo (while / for / do-while) e il tuo mi sembra un problema che si affronta per bene con queste due cose (poi, ovviamente, non sapendo esattamente quello che devono fare quei metodi non lo posso certo dire con assoluta certezza)... però hai scritto che devono fare sempre la stessa cosa e che cambia solo il numero di iterazioni.

    Quindi io opterei per qualcosa di questo tipo (che spreca un po' di posizioni della matrice che non vengono usate, ma magari ti semplifica un po' il problema):
    
    // All'interno della classe (al di fuori dei metodi) dichiari una matrice "calendario" che rappresenta tutto il tuo anno
    int[][] calendario = new int[12][31];
    
    // E dichiari un array con il numero di giorni per ciascun mese dell'anno (non saprei come potresti trattare il caso dell'anno bisestile)
    int[] giorniMese = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    
    // Nel main
    public static void main(String[] args) {
        // Istruzioni prima dei calcoli
        for(int i=0; i<12; i++) {
            faiQualcosa(calendario, i, giorniMese[i]);   // Richiama il metodo che eseguirà i tuoi calcoli sul mese i-esimo
        }
        // Istruzioni dopo i calcoli
    }
    
    // Questo metodo (uno solo!) esegue i calcoli su ciascun mese dell'anno
    // con la lunghezza giusta per quel mese
    void faiQualcosa(int[][] cal, int mese, int numeroGiorni) {
       // Eventuali operazioni da fare prima
       for(int i=0; i<numeroGiorni; i++) {
          cal[mese][i] = tuocalcolo;   // se devi calcolare un valore per ciascun giorno
       }
       // Eventuali operazioni da fare dopo
    }
    
    Ovviamente quelli più esperti di me sapranno darti soluzioni migliori e più efficienti, ma questo è ciò che è venuto in mente a me.
    Mmmh, sembra interessante, appena posso lo testerò di sicuro , comunque il mio dubbio era su come fare in queste situazioni in modo generico più che altro...
  • Re: Passare variabili contenute in metodi diversi ad un solo sottoprogramma

    Luca Rossi ha scritto:


    Mmmh, sembra interessante, appena posso lo testerò di sicuro
    Evita dati "globali" che fanno da "passaggio" tra più metodi a meno che ci siano "importanti" motivi per farlo (e nel tuo caso quasi sicuramente non ce ne sono). Ovviamente degli array "costanti" come i giorni nei mesi sono invece ok.

    Insomma, non mettere un valore in una variabile "globale" SOLO per poterlo passare ad un altro metodo.

    Luca Rossi ha scritto:


    comunque il mio dubbio era su come fare in queste situazioni in modo generico più che altro...
    Mostra del codice. Non si possono dare indicazioni più valide senza vedere cosa stavi cercando di fare. Le soluzioni ci sono sicuramente ma bisogna chiarire bene il contesto.
  • Re: Passare variabili contenute in metodi diversi ad un solo sottoprogramma

    Luca Rossi ha scritto:


    Esistono variabili globali in Java?
    Ovvio che esistono, poi sta a te se utilizzarle o meno...
Devi accedere o registrarti per scrivere nel forum
12 risposte