Esercizio con liste

di il
3 risposte

Esercizio con liste

Ciao,
un piccolo esercizio che però non sono riuscito a concludere.
Abbiamo due lista di tipo "persona".
L'oggetto persona ha varie proprietà, ma a me basta vedere se per nome-cognome di ogni oggetto della lista A ce n'è uno nella lista B.
Se presente, rispondo con stringa "presente", viceversa "assente".

Idea di partire ciclando le due liste in modo che ogni elemento della prima scorra tutto il secondo, e di usare un booleano per "ricordare" se presente o meno. Dopo vari ragionmente non ne sono venuto fuori, questo il codice al momento:
		boolean isPresent = false;
		for (listaA a: persona) {
			for (listaB b: personaB) {
				if (persona.getNome().equals(personaB.getNome()) && persona.getCognome().equals(persona.getCognome())) {
					isPresent = true; 
						esito.setMessaggio("presente");
					} else { 
						esito.setMessaggio("assente");
					}
				}  
Mi date qualche consiglio? grazie

3 Risposte

  • Re: Esercizio con liste

    RAGIONA, l'errore e' BANALE!

    SUPPONE di avere le due liste:

    lista 1: [A,B,C]
    lista 2: [X,B,Y]


    simula MENTALMENTE come dovrebbe funzionare il tuo algoritmo:

    1) inizi con A
    2) confronti (A,X):falso, (A,B):falso, (A,Y):falso
    3) passi a B
    4) confronti (B,X):falso, (B,B):vero, ...

    l'errore e' EVIDENTE!

    Per fare delle prove, puoi usare due liste contenenti SOLO delle stringhe, o degli interi (0,1,2,3,...)
  • Re: Esercizio con liste

    Test90 ha scritto:


    a me basta vedere se per nome-cognome di ogni oggetto della lista A ce n'è uno nella lista B.
    Attenzione, detto così potrebbe essere ambiguo. Vuoi verificare se:
    a) tutti gli oggetti in A sono almeno contenuti in B
    oppure se
    b) almeno un oggetto di A è contenuto in B
    ?

    Test90 ha scritto:


    Dopo vari ragionmente non ne sono venuto fuori, questo il codice al momento:
    Il codice che hai scritto comunque non va bene. C'è anche un errore evidente:
    		for (listaA a: persona) {
    			for (listaB b: personaB) {
    mentre invece sarebbe corretto:
    		for (Persona personaA : listaA) {
    			for (Persona personaB : listaB) {
    E quel "else" che hai messo è inutile/insensato. Se un match non c'è, non vuol dire "assente". Se un oggetto di A è assente in B lo puoi sapere solo dopo che hai scansionato tutto B.

    Prova a ragionare meglio. E per risolverlo, se è il caso a) si può anche sfruttare l'istruzione continue con label.
  • Re: Esercizio con liste

    Per non parlare di questa condizione che è "sempre vera" (a meno di una NPE):
    
    && persona.getCognome().equals(persona.getCognome())
    
Devi accedere o registrarti per scrivere nel forum
3 risposte