Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 31
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104

    [JAVA] Modificare elemento ArrayList

    Effettuo la ricerca di un elemento nell'arraylist.
    Una volta trovato, modifico un dato dall'interfaccia utente.
    Cliccando su aggiorna non avviene alcuna modifica.

    codice:
        private void bottoneAggiornaActionPerformed(java.awt.event.ActionEvent evt) {                                                
            // TODO add your handling code here:
            
            e.getStudente(j).setMatricola(matricola.getText());
            e.getStudente(j).setNome(nome.getText());
            e.getStudente(j).setCognome(cognome.getText());
            e.getStudente(j).setAppello(String.valueOf(appello.getSelectedItem()));
            e.getStudente(j).setVoto(Integer.valueOf((String) voto.getSelectedItem()));
            
            matricola.setText("");
            cognome.setText("");
            nome.setText("");
            appello.setSelectedIndex(0);
            voto.setSelectedIndex(0);
            found = false;
        }





  2. #2
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    157
    sei sicuro il metodo venga effettivamente invocato?
    quanto vale j?

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104
    Originariamente inviato da cigiri18
    sei sicuro il metodo venga effettivamente invocato?
    quanto vale j?
    codice:
        private void bottoneModificaActionPerformed(java.awt.event.ActionEvent evt) {                                                
            // TODO add your handling code here:     
            String search = JOptionPane.showInputDialog(this, "Inserisci la matricola da cercare", "RICERCA", JOptionPane.DEFAULT_OPTION);
            for (i = 0; i < e.size(); i++)
                if(search.equals(e.getStudente(i).getMatricola())) {
                    formAggiungi.setVisible(true);
                    formAggiungi.pack();
                    formAggiungi.setLocationRelativeTo(this);
                    
                    bottoneAggiungi.setEnabled(false);
                    bottoneAggiorna.setEnabled(true);   
                    found = true;
                    j = i;
                    matricola.setText(e.getStudente(j).getMatricola());
                    cognome.setText(e.getStudente(j).getCognome());
                    nome.setText(e.getStudente(j).getNome());
                    appello.setSelectedItem(e.getStudente(j).getAppello());
                    voto.setSelectedItem(e.getStudente(j).getVoto());
                }
            
            if (found == false)
                JOptionPane.showMessageDialog(null, "Matricola studente non trovata!", "Errore", JOptionPane.ERROR_MESSAGE);
        }
    fino a questo momento avevo sempre usato i.. ho pensato di usare un'altra variabile (in questo caso j) ed uguagliarla a i in modo che non si verificasse una eventuale modifica in altri frammenti di codice

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    157
    quando vengono invocati i due metodi?
    il problema credo sia in bottoneModificaActionPerformed, quando tu, dentro il ciclo, fai j=i. In questo modo ad ogni ciclo imposti un nuovo valore su j e, alla fine del ciclo, avrai j=e.size()-1, che non so quanto possa valere, ma sono praticamente certo non sia il valore che vorresti.

    una soluzione può essere il lasciar perdere il salvataggio di una variabile per conoscere la posizione che vuoi modificare(aggiungi che j, come nome di indice di un array, fa schifo, meglio id), e scorrere invece l'array quando devi aggiornarlo, trovando la posizione(matricola=matricola), e quindi modificando.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104
    L'istruzione j = i è dentro un if quindi avviene solo quando si verifica la condizione di uguaglianza tra stringhe...

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    157
    giusto, avevo letto male.
    prova a fare qualche stampa, quando viene invocato il metodo di modifica bottoneAggiornaActionPerformed, dello stato delle variabili.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104
    Lo stato delle variabili è giusto.. se voglio modificare il secondo studente, i e j valgono rispettivamente 1 quindi è corretto.
    ciò che mi sembra di capire è che è come se non "vedesse" i vari metodi set per reimpostare il valore dei campi... è proprio quello che non funziona

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da LuLyLuNa
    codice:
        private void bottoneModificaActionPerformed(java.awt.event.ActionEvent evt) {                                                
            // TODO add your handling code here:     
            String search = JOptionPane.showInputDialog(this, "Inserisci la matricola da cercare", "RICERCA", JOptionPane.DEFAULT_OPTION);
            for (i = 0; i < e.size(); i++)
                if(search.equals(e.getStudente(i).getMatricola())) {
                    formAggiungi.setVisible(true);
                    formAggiungi.pack();
                    formAggiungi.setLocationRelativeTo(this);
                    
                    bottoneAggiungi.setEnabled(false);
                    bottoneAggiorna.setEnabled(true);   
                    found = true;
                    j = i;
                    matricola.setText(e.getStudente(j).getMatricola());
                    cognome.setText(e.getStudente(j).getCognome());
                    nome.setText(e.getStudente(j).getNome());
                    appello.setSelectedItem(e.getStudente(j).getAppello());
                    voto.setSelectedItem(e.getStudente(j).getVoto());
                }
            
            if (found == false)
                JOptionPane.showMessageDialog(null, "Matricola studente non trovata!", "Errore", JOptionPane.ERROR_MESSAGE);
        }
    fino a questo momento avevo sempre usato i.. ho pensato di usare un'altra variabile (in questo caso j) ed uguagliarla a i in modo che non si verificasse una eventuale modifica in altri frammenti di codice
    Qualche suggerimento.

    1) Non devi preoccuparti di modificare i per sbaglio perché quella i non deve esistere fuori da quel ciclo! E' una variabile che nasce nel ciclo e muore con esso. Ed è per questo motivo che tale variabile andrebbe dichiarata col ciclo:

    codice:
    for (int i = 0; i < e.size(); i++) {
        ...
    }
    2) Tutte quelle chiamate a getStudente sono brutte, inutili e appesantiscono la lettura del codice.

    Studente studente = e.getStudente(i);
    studente.getMatricola();
    studente.getBlablabla();

    3) Non stavi usando una mappa per memorizzare gli studenti? In quel caso non serve "iterare": l'accesso agli elementi di una mappa è tempo costante (O(1)), basta dargli la chiave...

    4) if (found == false) { ... } non si può vedere: found è già un booleano, basta
    if (!found) { ... }
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da LuLyLuNa
    Lo stato delle variabili è giusto.. se voglio modificare il secondo studente, i e j valgono rispettivamente 1 quindi è corretto.
    ciò che mi sembra di capire è che è come se non "vedesse" i vari metodi set per reimpostare il valore dei campi... è proprio quello che non funziona
    I campi dove sono dichiarati? Sicuro/a che siano proprio le istanze che ti aspetti?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104
    Originariamente inviato da Alex'87
    Qualche suggerimento.

    1) Non devi preoccuparti di modificare i per sbaglio perché quella i non deve esistere fuori da quel ciclo! E' una variabile che nasce nel ciclo e muore con esso. Ed è per questo motivo che tale variabile andrebbe dichiarata col ciclo:

    codice:
    for (int i = 0; i < e.size(); i++) {
        ...
    }
    2) Tutte quelle chiamate a getStudente sono brutte, inutili e appesantiscono la lettura del codice.

    Studente studente = e.getStudente(i);
    studente.getMatricola();
    studente.getBlablabla();

    3) Non stavi usando una mappa per memorizzare gli studenti? In quel caso non serve "iterare": l'accesso agli elementi di una mappa è tempo costante (O(1)), basta dargli la chiave...

    4) if (found == false) { ... } non si può vedere: found è già un booleano, basta
    if (!found) { ... }

    1. Ho dichiarato i globale in modo da utilizzarla in qualsiasi parte del codice.

    2. Questa è la mia classe ElencoStudenti ecco perché faccio tutte quelle chiamate. Concordo sul fatto che siano orribili. Posso creare un oggetto di tipo studente nel main e funziona per tutto???
    codice:
    public class ElencoStudenti extends ArrayList<Studente> {
        
        // metodo per l'inserimento degli studenti
        public void addStudente(String matricola, String cognome, String nome, Object appello, Object voto) {
            Studente st = new Studente(matricola, cognome, nome, appello, voto);
            this.add(st);
        }
        
        // metodo per la selezione di un singolo studente
        public Studente getStudente(int i){
            return this.get(i);
        }
         
    }
    3. Non sono riuscita ad utilizzare le hashmap quindi per finire il progetto in breve tempo ho lasciato la classe estesa ad arraylist. Sono consapevole che una hashmap sarebbe più adatta

    4. Sorry sto fondendo!!!!!

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.