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

    Passaggio parametri che cambi l'istanza di riferimento

    Salve.
    Ho completato la parte dei punteggi del mio programma che simula un torneo di pallavolo, e funziona tutto correttamente, ora sto cercando di inserire dei commenti testuali congruenti con i vari punti realizzati/sbagliati, che contengano i nomi dei giocatori delle rispettive squadre. Questi ultimi sono contenuti in un array f[] di String nelle opportune istanze della classe Squadra.

    Nel costruttore della classe Telecronaca ho:
    codice:
    public Telecronaca(Squadra tu, Squadra pc) {
        this.win = tu;
        this.los = pc;
        popola();
    }
    dove win e los sono istanze di Squadra dichiarate fuori dai metodi.
    Il metodo popola() inserisce in un ArrayList<String> comm i vari commenti, parametrizzati, del tipo:
    codice:
    comm.add("Bel punto di " + win.f(nome()) + ", nulla può fare " + los.f(nome())";
    con nome() che non fa altro che pescare un numero che sia uno degli indici adatti dell'array f:
    codice:
    public int nome() {
        return random.nextInt(6)+1;
    }
    Nella classe Partita, dove si svolgono i vari punti, a seconda della squadra che fa punto invoco, dopo aver incrementato il suo punteggio, l'istanza di Telecronaca e il suo metodo commento(), passandogli due argomenti: per primo la squadra che realizza il punto, per secondo quella che lo subisce.
    In Telecronaca ho quindi:
    codice:
    public String commento(Squadra win, Squadra los) {
        this.win = win;
        this.los = los;
        return comm.get(random.nextInt(comm.size()));
    }
    Qui ho il problema poiché gli argomenti win e los non sovrascrivono le istanze win e los inizializzate nel costruttore per poter invocare popola(), e quindi ho che la Squadra tu è sempre win, quella pc è sempre los, e non coincide il commento testuale con il reale e corretto aggiornamento del punteggio.

    Mi fa un po' strano che una String di un ArrayList, una volta inserita nel suo contenitore, perda la parametrizzazione di un pezzo della String stessa. Vorrei cioè che l'istanza win fosse sempre agganciata alla squadra che fa punto, da come passo il parametro in commento(), e non sempre alla squadra tu del giocatore umano come da costruttore.
    Come esco da questo vicolo cieco?
    Ultima modifica di Gas75; 11-05-2022 a 00:48

  2. #2
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    954
    L'errore non sta nel fatto che non vengono aggiornati i puntamenti a win e los ma è il metodo popola che se viene chiamato solo nel costruttore, in quel momento utilizza come this.win la squadra tu e come this.loc la squadra pc.

    Dovresti costruire di volta in volta il commento da aggiuenre in popola. Se così non è posta tutti i punti dove viene richiamato il metodo popola()

  3. #3
    Grazie Joe Taras, in questi giorni ho risolto il problema invocando popola() non nel costruttore ma nel metodo che genera il commento, passandogli come argomento dei boolean dai quale stabilire quale delle due squadre abbia fatto punto e quale l'abbia subito, oltre che gestire i turni di battuta (la squadra che subisce non può fare punto in battuta nell'azione successiva...).

    Il programma è completato, ora sto cercando di svilupparne una versione GUI.

  4. #4
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    954
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Grazie Joe Taras, in questi giorni ho risolto il problema invocando popola() non nel costruttore ma nel metodo che genera il commento, passandogli come argomento dei boolean dai quale stabilire quale delle due squadre abbia fatto punto e quale l'abbia subito, oltre che gestire i turni di battuta (la squadra che subisce non può fare punto in battuta nell'azione successiva...).

    Il programma è completato, ora sto cercando di svilupparne una versione GUI.
    Ok, ottimo

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