Il TreeSet l' ho usato perchè mi serviva restituire una collezione senza duplicati. E per quanto riguarda l'iteratore mi viene chiesto esplicitamente di restiuire un iteratore.
Questa è la classe Prodotto:
codice:
import java.io.Serializable;
import java.util.Scanner;
public class Prodotto implements Serializable {
static int codice;
int codiceProd = 0;
String nome;
String descrizione;
double prezzo;
Scanner in = new Scanner(System.in);
public Prodotto(){
codice++;
codiceProd = codice;
}
public Prodotto(String nome, String descrizione, double prezzo) {
this();
this.nome = nome;
setPrezzo(prezzo);
this.descrizione = descrizione;
}
public Prodotto(String nome, double prezzo) {
this(nome, null, prezzo);
}
public void setDescrizione(String descrizione) {
this.descrizione = descrizione;
}
public double getPrezzo() {
return prezzo;
}
public void setPrezzo(double nuovoPrezzo) {
try {
prezzo = nuovoPrezzo;
if (nuovoPrezzo < 0) {
throw new ExceptionPrezzoNegativo();
}
} catch (ExceptionPrezzoNegativo e) {
System.out.println(e.getMessage());
System.out.println("Inserire nuovo prezzo:");
nuovoPrezzo = in.nextDouble();
setPrezzo(nuovoPrezzo);
}
}
public String toString() {
if (descrizione != null) {
return codiceProd + " " + " " + nome + " " + descrizione + " " + prezzo;
} else {
return codiceProd + " " + " " + nome + " " + prezzo;
}
}
public boolean equals(Object obj) {
Prodotto prod = (Prodotto) obj;
if(codiceProd == prod.codiceProd){
return true;
}else{
return false;
}
}
}
Questa è la classe ProdottoScontato:
codice:
import java.util.Scanner;
public class ProdottoScontato extends Prodotto{
double sconto;
Scanner in = new Scanner(System.in);
public ProdottoScontato(String nome, String descrizione, double prezzo, double sconto) {
super();
setSconto(sconto);
this.nome = nome;
this.descrizione = descrizione;
this.prezzo = prezzo;
}
public ProdottoScontato(String nome, double prezzo, double sconto) {
super();
setSconto(sconto);
this.nome = nome;
setPrezzo(prezzo);
}
public double getPrezzo() {
return sconto * 100 / super.getPrezzo() ;
}
private void setSconto(double sconto){
try {
this.sconto = sconto;
if(this.sconto < 0 || this.sconto > 90){
throw new ScontoException();
}
}catch(ScontoException e){
System.out.println(e.getMessage());
System.out.println("Inserire un nuovo sconto valido: ");
sconto = in.nextDouble();
setSconto(sconto);
}
}
}