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

    Ordinamento righe di un file di testo.

    Anzitutto saluto gli utenti del forum essendomi appena iscritto, se l'ho fatto è anche perché ormai sono giunto alla disperazione visto che libri, google e suggerimenti non mi sono bastati facendomi sentire un completo impedito
    Premesso che non è molto tempo che studio il linguaggio e quindi ogni tanto dimentico per strada alcune cose, mi sono bloccato in questo esercizio.

    Devo prendere questo file persone.data contenente nome, cognome e data di nascita (Nome Cognome gg/mm/aaaa) per ogni riga e ordinarlo con i seguenti criteri:
    Ordina le righe per anno di nascita -> se l'anno di nascita è uguale ordina per mese -> se uguali per giorno e così via.
    Avevo inizialmente pensato di salvare i dati in una matrice, ma ordinare le righe in questo modo farebbe venir fuori un pastrocchio inutile.
    Mi è stato suggerito invece di creare una classe che rappresenti una riga e per ognuna di essa creare un oggetto (ricavandone i dati dal file) da salvare in una collection.
    Poi, tramite la funzione compareTo() dovrei creare l'ordinamento apposito che paragona gli oggetti salvati.

    Il problema è che il come dovrebbe avvenire il tutto mi è ancora poco chiaro potreste darmi una mano voi a capire finalmente quel che devo scrivere?
    P.S.vviamente non sto chiedendo righe di codice, solo suggerimenti aggiuntivi
    Ultima modifica di tesseract; 07-02-2015 a 19:40

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da tesseract Visualizza il messaggio
    Mi è stato suggerito invece di creare una classe che rappresenti una riga e per ognuna di essa creare un oggetto (ricavandone i dati dal file) da salvare in una collection.
    Sì, questo è l'approccio "giusto" nell'ottica Object Oriented.

    Quote Originariamente inviata da tesseract Visualizza il messaggio
    Poi, tramite la funzione compareTo() dovrei creare l'ordinamento apposito che paragona gli oggetti salvati.
    Una classe può implementare Comparable, per definire il criterio di ordinamento "naturale" di quella classe di oggetti. Ne puoi avere solo uno di criterio, con Comparable, dato che è nella classe degli oggetti.
    Per qualunque altro criterio (quanti ne vuoi) devi implementare Comparator in classi separate da quella della tua classe di oggetti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    rieccomi, purtroppo in questi giorni non ho potuto lavorarci su ma vorrei sapere, prima di continuare, se nel frattempo ho implementato bene Comparable
    codice:
    public class DatiAnagrafici implements Comparable{
        
        String nome, cognome, data; 
        int giorno, mese, anno;
    
        public DatiAnagrafici(String nome, String cognome, int giorno, int mese, int anno) {
            this.nome = nome;
            this.cognome = cognome;
            this.giorno = giorno;
            this.mese = mese;
            this.anno = anno;
        }
            
        public String getNome() {
            return nome;
        }
    
        public void setNome(String nome) {
            this.nome = nome;
        }
    
        public String getCognome() {
            return cognome;
        }
    
        public void setCognome(String cognome) {
            this.cognome = cognome;
        }
    
        public int getGiorno() {
            return giorno;
        }
    
        public void setGiorno(int giorno) {
            this.giorno = giorno;
        }
    
        public int getMese() {
            return mese;
        }
    
        public void setMese(int mese) {
            this.mese = mese;
        }
    
        public int getAnno() {
            return anno;
        }
    
        public void setAnno(int anno) {
            this.anno = anno;
        }
    
        public int compareTo(Object obj) throws ClassCastException{
            
            if (!(obj instanceof DatiAnagrafici)) {
                throw new ClassCastException();
            }
            DatiAnagrafici compara = (DatiAnagrafici) obj;
            if (getAnno() - compara.getAnno() != 0) 
                return getAnno()-compara.getAnno();
            if (getAnno() - compara.getAnno() == 0) {
                
                if (getMese() - compara.getMese() != 0) 
                    return getMese() -compara.getMese();
                if (getMese() - compara.getMese() == 0) {
                        
                    if (getGiorno() - compara.getGiorno() != 0)
                        return getGiorno() - compara.getGiorno();
                    if (getGiorno() - compara.getGiorno() == 0) {
                        return (getCognome().compareTo(compara.getCognome()));
                    }                        
                }
            }
            return getNome().compareTo(compara.getNome());        
        }    
    }
    Ultima modifica di LeleFT; 10-02-2015 a 10:30 Motivo: Modificati tag QUOTE con tag CODE

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    @tesseract: il codice va postato all'interno dei tag CODE, non dei tag QUOTE (che servono a fare citazioni).
    Ho corretto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Scusate l'up, purtroppo non sono ancora riuscito ad andare avanti, è la prima volta che mi capita un esercizio di ordinamento simile, mi ha spiazzato

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.