|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Nov 2009
Messaggi: 2
|
[JAVA] Problema controllo duplicazione in lista
E un problema lungo da spiegare..ma in poche parole devo cercare duplicati di una lista all'interno dell'oggetto di cui è composta la lista..
se poi serve spiego meglio..magari posto il codice aiutooo :o: |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Non ho capito molto:
Tu hai una lista e devi trovare tutti gli oggetti duplicati che essa potrebbe contenere?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Nov 2009
Messaggi: 2
|
Ti posto un pezzo di codice:
La lista è creata nella classe offertaformativa: public class OffertaFormativa { private List<Corso> corsi=new ArrayList<Corso>();<---questa private List<Docente> docenti=new ArrayList <Docente>(); private Corso c; private int numdocenti; private int oretot; public Corso creaCorso(String nome, String descrizione){ c=new Corso(nome,descrizione); corsi.add(c); return c; }ecc.. e io nella classe corso ho un metodo in cui devo cercare se ci sono duplicati in tutti i corsi: public class Corso implements Comparable<Corso> { private String nome; private String descrizione; public OffertaFormativa o=new OffertaFormativa(); private Map<String,Insegnamento> insegnamenti=new HashMap<String,Insegnamento>(); public Corso(String nome, String descrizione) { this.nome=nome; this.descrizione=descrizione; } public String getNome(){ return nome; } public String getDescrizione(){ return descrizione; } public Insegnamento nuovoInsegnamento(String codice, String nome, int crediti) throws CodiceInsegnamentoDuplicato{ if(insegnamenti.containsKey(codice)) throw new CodiceInsegnamentoDuplicato(); for(Corso c:o.getCorsi()){ if(c.insegnamenti.containsKey(codice))throw new CodiceInsegnamentoDuplicato();<--- ho provato cosi ma non funziona } Insegnamento i=new Insegnamento(codice,nome,crediti); insegnamenti.put(codice, i); return i; } |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 198
|
Allora, innanzi tutto per favore edita il post e racchiudi il codice tra i tag CODE, perchè così non si capisce veramente nulla.
Secondo, che vuol dire "non funziona"? Non compila? Non trova ciò che dovrebbe trovare? Trova ciò che non dovrebbe trovare? |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Ragioniamo, un attimo.
Riepilogo la situazione: tu hai che un Corso è così definito: ha un nome, una descrizione, una relazione con l'offerta formativa di riferimento, e una collezione di insegnamenti. Codice:
class Corso
{
nome: String
descrizione: String
o : OffertaFormativa
inegnamenti: Map<String,Insegnamento>
}
Codice:
class OffertaFormativa
{
// membri caratterizzanti:
corsi: List<Corso>
docenti: List<Docente>
// membri non caratterizzanti, credo:
c: Corso
numerodocenti: int
oretot: int
}
Codice:
class Insegnamento
{
codice: String
nome: String
crediti: int
}
Esiste ora la necessità di creare e inserire un nuovo Insegnamento tra quelli già presenti, in un qualsiasi Corso. Non vogliamo però introdurre in un Corso un Insegnamento duplicato. Si deduce dal tuo post che un Insegnamento è considerato come il duplicato di un altro se hanno lo stesso codice, quindi l'identità di un Insegnamento è stabilità dal suo codice. Analizziamo un po' la sistuazione: - la classe Corso ha un metodo 'nuovoInsegnamento' che crea un nuovo oggetto Insegnamento e lo inserisce nella sua collezione di Insegnamenti, se i dati inseriti per il nuovo Insegnamento non definiscono un duplicato. Inoltre il metodo restituisce al chiamante un l'Insegnamento appena creato: se però si sta definendo un duplicato, cosa dovrebbe restituire? Potrebbe restituire un riferimento nullo: in tal modo il chiamante può sapere se l'operazione è andata a buon fine o meno. - la collezione di appoggio per gli Insegnamenti è una Map e la chiave è il codice dell'Insegnamento. Potresti definire il tuo metodo così: Codice:
// in class Corso...
public Insegnamento nuovoInsegnamento(String codice, String nome, int crediti) {
Insegnamento nuovo = null;
if (! insegnamenti.containsKey(codice)) {
nuovo = new Insegnamento(codice,nome,crediti);
insegnamenti.put(codice, nuovo);
}
return nuovo;
}
Questo implica che questi due codici risultano diversi: "GH2347" e "gH2347". Nota che nel metodo non occorre lanciare alcuna eccezione: se la chiave è già presente è sufficiente restituire null al chiamante. Se invece vuoi lanciare un'eccezione, puoi farlo, ma se l'eccezione che hai definito è una unchecked exception e il chiamante la ignora (non fa il try-catch) l'eccezione viene propagata (e se nessuno la intercetta arriva al "livello" del main, ma non impedisce alla tua applicazione di continuare a girare).
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 06-11-2009 alle 10:20. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:52.



















