Visualizzazione dei risultati da 1 a 10 su 16

Hybrid View

  1. #1
    Il codice sembra funzionare ora ma mi da un problema:
    HashSet<Utente> utenti = new HashSet<>();
    Iterator<Utente> it1 = utenti.iterator();
    Utente cercautente=new Utente();
    if(it1.hasNext())
    cercautente=it1.next();

    eseguendo cercautente.getnome mi restituisce sempre un valore null. Cos'è che sbaglio o in quale altro modo posso accedere a uno dei campi degli oggetti della collezione?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da campaenrico Visualizza il messaggio
    codice:
    HashSet<Utente> utenti = new HashSet<>();
    Iterator<Utente> it1 = utenti.iterator();
    Utente cercautente=new Utente();
           if(it1.hasNext())
                 cercautente=it1.next();
    eseguendo cercautente.getnome mi restituisce sempre un valore null
    Il contesto purtroppo non è molto chiaro .... se hai appena istanziato un nuovo HashSet, esso è vuoto, quindi cosa ti aspetti dalla iterazione?

    E poi visto che usi i generics (e quindi almeno Java 5), sfrutta anche il "for-each":

    codice:
    for (Utente utente : utenti) {
        // usa utente i-esimo
    }

    Non serve infatti istanziare un oggetto Utente ... è la iterazione che ti fornisce quelli presenti nel HashSet.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    [QUOTE=andbin;25303782]Il contesto purtroppo non è molto chiaro .... se hai appena istanziato un nuovo HashSet, esso è vuoto, quindi cosa ti aspetti dalla iterazione?

    si scusami li inserivo così come avevo scritto nel primo codice
    Utente u= new Utente();
    u.InserisciUtente();
    utenti.add(u);


    E il for che mi hai scritto secondo quale condizione continua gira tutti gli utenti in qualsiasi caso?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da campaenrico Visualizza il messaggio
    E il for che mi hai scritto secondo quale condizione continua gira tutti gli utenti in qualsiasi caso?
    Il for-each itera tutti gli elementi nell'oggetto Iterable (nel tuo caso il HashSet). Sotto, di nascosto, usa nient'altro che un Iterator replicando di fatto lo stesso codice while, test hasNext ... next che dovresti scrivere tu a mano. E il for-each quindi è più breve e anche più leggibile.

    E siccome è HashSet, ricorda che l'ordine di iterazione non è prevedibile e può anche cambiare man mano che il HashSet si espande.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    E se io tipo ricerco uno specifico utente dato un nome e lo voglio rimuovere o comunque voglio cambiare qualcosa di quell'oggetto lo posso usare anche al di fuori del for? e sempre ricercando appunto questo particolare oggetto non c'è modo di terminare il ciclo quando l'ho trovato?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da campaenrico Visualizza il messaggio
    E se io tipo ricerco uno specifico utente dato un nome e lo voglio rimuovere o comunque voglio cambiare qualcosa di quell'oggetto lo posso usare anche al di fuori del for? e sempre ricercando appunto questo particolare oggetto non c'è modo di terminare il ciclo quando l'ho trovato?
    Se tu facessi una classe es. InsiemeUtenti (che concettualmente ha anche senso, in generale, e oltretutto potresti incapsulare la logica di gestione dell'insieme lì dentro), potresti fare:

    codice:
    public class InsiemeUtenti {
        private HashSet<Utente> utenti;
    
        // ... costruttore/i, metodi per aggiungere, ecc...
    
        public Utente cercaUtentePerNome(String nome) {
            for (Utente utente : utenti) {
                if (nome.equals(utente.getNome()) {
                    return utente;
                }
            }
            
            return null;  // non trovato
        }
        
        public boolean eliminaUtentePerNome(String nome) {
            Iterator<Utente> it = utenti.iterator();
            while (it.hasNext()) {
                Utente utente = it.next();
                if (nome.equals(utente.getNome()) {
                    it.remove();
                    return true;
                }
            }
            
            return false;  // non trovato
        }
    }
    Ultima modifica di andbin; 19-04-2015 a 11:40
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Ottima idea veramente, grazie del consiglio adesso mi metto a farlo

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