Come confrontare due oggetti all'interno dello stesso arrayList

di
Anonimizzato21659
il
6 risposte

Come confrontare due oggetti all'interno dello stesso arrayList

La traccia chiede che si inseriscano i dati dei docenti ed in seguito vuole verificare se all'interno ci sono più tirocinii associati alla stessa matricola vi metto il codice per mostravi quello che ho fatto, spero di ricevere risposta, ringrazio in anticipo


Classe principale



package docente;

import it.unibas.utilita.Console;


public class Principale {

    
    
    private void inizio(){
        boolean continua  = true;
        Archivio archivio = new Archivio();
        while(continua){
            int scelta = this.schermoMenu();
            if(scelta == 0){
                System.out.println("Arrivederci");
                continua = false;
            }
            if(scelta == 1){
                Docenti p = this.leggiDati(archivio);
                archivio.aggiungiDocente(p);
                System.out.println("Docente aggiunto correttamente");
            }
            if(scelta == 2){
                System.out.println("inserisci il codice del docente");
                String codice = this.leggiStringaNonVuota();
                Docenti m = archivio.verificaCodice(codice);
                if(m == null){
                    System.out.println("Errore:il docente non esiste");
                }else{
                    System.out.println(m.toString());
                    if(m.getLunghezza() > 2){
                        System.out.println("questo docente non pùò gestire altri tirocini");
                    }else{
                        Tirocinio s = this.leggiTirocinio();
                        m.aggiungiTirocinio(s);
                        System.out.println("Aggiunto correttamente");
                    }
                }
            }
            if(scelta == 3){
                
                    if(archivio.verificaTirocinio()){
                    System.out.println("Ci sono più tirocinii con la stessa matricola");
                    }else{
                        System.out.println("non ci sono più tirocinii con la stessa matricola");
                    }
                                
            }
        }
    }
    
    private Docenti leggiDati(Archivio m){
        System.out.println("inserisci il codice del docente");
        String codice = this.leggiStringaNonVuota();
        while(m.verificaCodice(codice) != null){
            System.out.println("Errore: esiste già questo docente, fornisci dati"
                    + " differeti");
            codice = this.leggiStringaNonVuota();
        }
        System.out.println("inserisci nome e cognome del docente");
        String nomeCognome = this.leggiStringaNonVuota();
        System.out.println("inserisci la qualifica del docente valori ammessi"
                + " Professore Ordinario/Professore Associato/Ricercatore");
        String qualifica = this.leggiStringaNonVuota();
        while(!(qualifica.equalsIgnoreCase("Professore Ordinario") || 
                qualifica.equalsIgnoreCase("Professore Associato") ||
                qualifica.equalsIgnoreCase("Ricercatore"))){
            System.out.println("Errore: non puoi utilizzare una qualifica differente,riprova");
            qualifica = this.leggiStringaNonVuota();
        }
        return new Docenti(codice,nomeCognome,qualifica);
    }
    
    private Tirocinio leggiTirocinio(){
        System.out.println("inserisci la matricola dello studente");
        String matricola = this.leggiStringaNonVuota();
        System.out.println("inserisci il nome dello studente");
        String nome = this.leggiStringaNonVuota();
        System.out.println("inserisci il titolo del progetto");
        String titolo = this.leggiStringaNonVuota();
        System.out.println("inserisci le ore di lavoro necessarie");
        int ore = Console.leggiIntero();
        return new Tirocinio(matricola, nome, titolo, ore);
    }
    
    
    private int schermoMenu(){
        System.out.println("1) inserisci dati docente");
        System.out.println("2) inserisci dati tirocinio");
        System.out.println("3) cerca duplicati");
        System.out.println("4) calcola docente impeganto");
        System.out.println("5) Salva dati su disco");
        System.out.print("Inserisci la tua scelta: ");
        int scelta = Console.leggiIntero();
        while(scelta < 0 || scelta > 5){
            System.out.println("Errore: la tua scelta non è valida riprova");
            scelta = Console.leggiIntero();
        }
        return scelta;
    }
    
    private String leggiStringaNonVuota(){
        String stringa = Console.leggiStringa();
        while(stringa.trim().isEmpty()){
            System.out.println("Errore: non può essere vuota,riprova");
            stringa = Console.leggiStringa();
        }
        return stringa;
    }
    
    
    
    public static void main(String[] args) {
        Principale p = new Principale();
        p.inizio();
    }
    
}




Classe Archivio



package docente;

import java.util.List;
import java.util.ArrayList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Archivio {
    private List<Docenti> archivio = new ArrayList<>();
    private Logger log = LoggerFactory.getLogger("Archivio.class");
    
    public Docenti verificaCodice(String codice){
        for(Docenti s : this.archivio){ 
            if(s.getCodice().equalsIgnoreCase(codice)){
                log.debug("il codice è presente");
                return s;
            }
        }
        return null;
    }
    
    public void aggiungiDocente(Docenti m){
        this.archivio.add(m);
    }
    
    public boolean verificaTirocinio(){
        for(Docenti m : this.archivio){
            if(m.verifica()){
                return true;
            }
        }
        return false;
    }
    
}

Classe Docenti


package docente;

import java.util.List;
import java.util.ArrayList;


public class Docenti {
    private String codice;
    private String nomeCognome;
    private String qualifica;
    private List<Tirocinio> lista = new ArrayList<>();
        
    
    public Docenti(String codice,String nomeCognome,String qualifica){
        this.codice = codice;
        this.nomeCognome = nomeCognome;
        this.qualifica = qualifica;
    }
    
    public String getCodice(){
        return this.codice;
    }
    
    @Override
    public String toString(){
        StringBuilder m = new StringBuilder();
        m.append("\n Dati docente");
        m.append("\nCodice: " + this.codice);
        m.append("\nNome e Cognome: " + this.nomeCognome);
        m.append("\nQualifica: " + this.qualifica + "\n");
        return m.toString();
    }
    
    public int getLunghezza(){
        return this.lista.size();
    }
    
    public void aggiungiTirocinio(Tirocinio t){
        this.lista.add(t);
    }
    
    public int contaMatricola(){
        int conta = 0;
        Tirocinio s = lista.get(0);
        for(Tirocinio m : this.lista){
            if(s.getMatricola().equalsIgnoreCase(m.getMatricola())){
                conta++;
            }
        }
        return conta;
    }
    
    public boolean verifica(){
        for(Tirocinio m : this.lista){
            if(this.contaMatricola() > 1){
                return true;
            }
        }
        return false;
    }
    
    

}

Classe Tirocinio



package docente;


public class Tirocinio {
    private String matricola;
    private String nome;
    private String titolo;
    private int ore;
    
    public Tirocinio(String matricola,String nome,String titolo,int ore){
        this.matricola = matricola;
        this.nome = nome;
        this.titolo = titolo;
        this.ore = ore;
    }
    
    public String getMatricola(){
        return this.matricola;
    }
    
}


6 Risposte

  • Re: Come confrontare due oggetti all'interno dello stesso arrayList

    vitto46 ha scritto:


    vuole verificare se all'interno ci sono più tirocinii associati alla stessa matricola
    Chiariamo un momento questo:
    - verificare se ci sono 2 (o più) tirocinio con stessa matricola per un singolo docente?
    o
    - verificare se ci sono 2 (o più) tirocinio con stessa matricola tra tutti i docenti?
  • Re: Come confrontare due oggetti all'interno dello stesso arrayList

    Tra tutti perchè singolo docente funziona ed è il codice che scritto, ma non ho idea di come fare per più docenti
  • Re: Come confrontare due oggetti all'interno dello stesso arrayList

    vitto46 ha scritto:


    public class Docenti {
    
        // .....    
    
        public int contaMatricola(){
            int conta = 0;
            Tirocinio s = lista.get(0);
            for(Tirocinio m : this.lista){
                if(s.getMatricola().equalsIgnoreCase(m.getMatricola())){
                    conta++;
                }
            }
            return conta;
        }
    }
    Innanzitutto il contaMatricola che hai scritto non ha senso, è lo stesso problema che ti avevo già segnalato qui. In pratica NON stai verificando se per un singolo Docente una qualunque matricola si ripete!!

    La soluzione "veloce" l'avevo già detta, l'uso di un HashSet<String> .

    E se vuoi che CIASCUNA matricola sia "unica" su TUTTI i docenti, allora semplicemente usa un singolo HashSet che fa da "contesto" nella scansione di docenti e sotto-tirocini.
  • Re: Come confrontare due oggetti all'interno dello stesso arrayList

    Non posso usare hashset
  • Re: Come confrontare due oggetti all'interno dello stesso arrayList

    vitto46 ha scritto:


    Non posso usare hashset
    Allora innanzitutto puoi arrivare a creare un ArrayList che contiene tutte le matricole (di tutti i tirocini di tutti i docenti).
    Poi vai a verificare se in quel ArrayList trovi una matricola ripetuta.
  • Re: Come confrontare due oggetti all'interno dello stesso arrayList

    Ok grazie
Devi accedere o registrarti per scrivere nel forum
6 risposte