Quote Originariamente inviata da Dario95 Visualizza il messaggio
Il TreeSet l' ho usato perchè mi serviva restituire una collezione senza duplicati.
Sì, ma il concetto "senza duplicati" è secondo il criterio fornito dal comparator, quindi sul prezzo. Se hai 3 prodotti con lo stesso prezzo, tiene solo il primo trovato e gli altri li ignora. È davvero quello che vuoi? (giusto per capire io)

Quote Originariamente inviata da Dario95 Visualizza il messaggio
E per quanto riguarda l'iteratore mi viene chiesto esplicitamente di restiuire un iteratore.
Ok, se è un requisito ... ovviamente, no prob!

Quote Originariamente inviata da Dario95 Visualizza il messaggio
Questa è la classe Prodotto
Questa è la classe ProdottoScontato
Scusa se ti segnalo queste cose ma è doveroso farlo:

- le tue classi fanno "troppe" cose, si occupano anche della interazione (con input!) verso l'utente. Non vanno affatto bene.
E il fatto poi che l'input lo fai nei setPrezzo/setSconto è decisamente brutto e poco pulito, soprattutto per quei try-catch in cui oltretutto invochi ricorsivamente il metodo (noooooo!).

- in setPrezzo di Prodotto prima fai l'assegnamento poi il controllo per negativo. Magari è meglio il contrario! Altrimenti il vincolo non è poi così un vincolo ... sì lanci una eccezione ma lo stato dell'oggetto in quel momento è cambiato.

- abituati e tenere le variabili di istanza tipicamente 'private'.

E ora veniamo al punto importante: getPrezzo in ProdottoScontato è un "override" di quello in Prodotto. Se hai una variabile di tipo Prodotto ma che fa riferimento ad un oggetto ProdottoScontato e invochi prod.getPrezzo(), il getPrezzo invocato è quello dell'oggetto realmente istanziato, ovvero del ProdottoScontato.
In sostanza, il comparatore, comparando i prezzi, concettualmente compara prezzi normali con prezzi "scontati".

E tra l'altro, perché fai:

sconto * 100 / super.getPrezzo()

?? Questo non applica uno sconto ... non ha molto senso ....