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

    chiarimenti compareTo lessicografico

    Buonasera..avrei due domande:
    Ho creato una classe studente e devo al suo interno creare un compareTo rispetto alla matricola che è una stringa..dunque trattasi di un ordinamento lessicografico...
    ma non so come devo fare ad implementarlo...io ho fatto così ma credo che sia sbagliato...
    Qualcuno mi aiuta??

    codice:
    public class Studente implements Comparable {
    private String matricola;
    private String nome;
    private LinkedList<String>preferenze;
    public Studente(String matricola, String nome, LinkedList<String> preferenze) {
    	this.matricola = matricola;
    	this.nome = nome;
    	this.preferenze = preferenze;
    }
    public String getMatricola() {
    	return matricola;
    }
    public void setMatricola(String matricola) {
    	this.matricola = matricola;
    }
    public String getNome() {
    	return nome;
    }
    public void setNome(String nome) {
    	this.nome = nome;
    }
    public LinkedList<String> getPreferenze() {
    	return preferenze;
    }
    public void setPreferenze(LinkedList<String> preferenze) {
    	this.preferenze = preferenze;
    }
    @Override
    public String toString() {
    	return "Studente [matricola=" + matricola + ", nome=" + nome
    			+ ", preferenze=" + preferenze + "]";
    }
    public boolean equals (Object o){
    	if(o instanceof Studente){
    		Studente s=(Studente)o;
    		return s.getMatricola().equals(this.getMatricola());
    	}
    	return false;
    	}
    public int compareTo(Object o){
    	if(o instanceof Studente)
    		Studente s=(Studente)o;
    	
    	      return this.getNome().compareTo(s.getNome());
    	
    	}
    
    
    }
    L' altra domanda==> come cambia il compareTo se a parità di matricola avessi dovuto ordinare rispetto al nome dello studente ??

  2. #2

    Re: chiarimenti compareTo lessicografico

    Originariamente inviato da lorenzcollixx
    devo al suo interno creare un compareTo rispetto alla matricola che è una stringa
    Quindi la tua implementazione non è corretta, in quanto devi basarla sul campo di istanza matricola.

    Originariamente inviato da lorenzcollixx
    L' altra domanda==> come cambia il compareTo se a parità di matricola avessi dovuto ordinare rispetto al nome dello studente ??
    codice:
    public int compareTo(Object o) {
            if ( o == null || !(o instanceof Studente) )
                throw new RuntimeException();
           
            Studente s = (Studente) o;
    	
            if ( !this.matricola.equals(s.matricola) )
                 return this.matricola.compareTo(s.matricola);
    
    	return this.nome.compareTo(s.nome);
    }
    In questo caso la chiave matricola ha una priorità maggiore rispetto alla chiave nome.

    N.B. Se utilizzi la versione 5, ti conviene specificare Studente come parametro di tipo per l'interfaccia Comparable, così ti risparmi il controllo del tipo e cast.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Innanzitutto dovresti sfruttare i generici, ed implementare Comparable<Studente>, quindi riscrivere così il metodo:

    codice:
    public int compareTo(Studente o)
    {
      return matricola.compareTo(o.matricola);
    }
    Se invece vuoi ordinare in base al nome, ovviamente usa il nome.
    Questo supponendo che l'implementazione dell'interfaccia Comparable fornita da String ti vada bene, altrimenti devi comparare manualmente i campi secondo i tuoi criteri.

    Aldilà di questo, attenzione all'override di equals perché bisognerebbe mantenere (anche facendo l'override del metodo hashCode) il contratto fra equals e hashCode descritto nella documentazione della classe Object.

    Fra l'altro, così come l'hai postato il tuo metodo non credo compili, se non entra nell'if non ritorna nulla.

  4. #4
    Grazie davvero di cuore..mi state spianando la salita!!

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