ho queste classi:
[PHP]public interface Articolo {
public int getCostoUnitario();
public String getCodice();
}/PHP]
Codice PHP:
public class Disco implements Articolo {
private String codice;
private int costoUnitario;
public Disco(String codice, int costoUnitario) {
this.codice = codice;
this.costoUnitario = costoUnitario;
}
public String getCodice() {
return this.codice;
}
public int getCostoUnitario() {
return this.costoUnitario;
}
public boolean equals(Object o) {
Disco d = (Disco)o;
return this.codice.equals(d.getCodice());
}
public int hashCode() {
return this.codice.hashCode();
}
public String toString() {
return "Disco: " + this.codice + "," + this.costoUnitario;
}
}
Codice PHP:
public class Libro implements Articolo {
private String codice;
private int costoUnitario;
public Libro(String codice, int costoUnitario) {
this.codice = codice;
this.costoUnitario = costoUnitario;
}
public String getCodice() {
return this.codice;
}
public int getCostoUnitario() {
return this.costoUnitario;
}
public boolean equals(Object o) {
Libro l = (Libro)o;
return this.codice.equals(l.getCodice());
}
public int hashCode() {
return this.codice.hashCode();
}
public String toString() {
return "Libro: " + this.codice + "," + this.costoUnitario;
}
}
Codice PHP:
import java.util.*;
public class ComparatorePerCosto implements Comparator<Articolo> {
public int compare(Articolo a1,Articolo a2) {
return a1.getCostoUnitario()-a2.getCostoUnitario();
}
}
Codice PHP:
import java.util.*;
public class Magazzino {
private Map<Articolo,Integer> articolo2quantita;
public Magazzino() {
this.articolo2quantita = new HashMap<Articolo,Integer>();
}
public void aggiungiArticolo(Articolo articolo, int quantita) {
this.articolo2quantita.put(articolo,quantita);
}
public Set<Articolo> getArticoli() {
return this.articolo2quantita.keySet();
}
public int calcolaValoreMagazzino() {
int valore = 0;
Set<Articolo> articoli = this.getArticoli();
for (Articolo a : articoli) {
int quantitaDiA = this.articolo2quantita.get(a);
valore += a.getCostoUnitario() * quantitaDiA;
}
// DOMANDA 2: scrivere codice mancante
return valore;
}
public Map<Integer,Set<String>> articoliEconomici(int soglia) {
// costo -> insieme di codici di articoli con il costo della chiave
Map<Integer,Set<String>> costo2insiemeCodiceArticoli = new HashMap<Integer,Set<String>>();
Set<String> codici = new HashSet<String>();
for (Articolo a : this.getArticoli()) {
if (a.getCostoUnitario() < soglia) {
int costoOk = a.getCostoUnitario();
codici.add(a.getCodice());
costo2insiemeCodiceArticoli.put(costoOk,codici);
}
}
// DOMANDA 3: scrivere codice mancante
return costo2insiemeCodiceArticoli;
}
public List<Articolo> articoliOrdinatiPerCosto() {
List<Articolo> listaArticoli = new LinkedList<Articolo>();
// DOMANDA 4: scrivere codice mancante
for (Articolo a : this.getArticoli()) {
listaArticoli.add(a);
}
Collections.sort(listaArticoli,new ComparatorePerCosto());
return listaArticoli;
}
public static void main(String[] args) {
Articolo libro1 = new Libro("090",30);
Articolo disco1 = new Disco("080",20);
Articolo disco2 = new Disco("070",5);
Articolo libro2 = new Libro("050",6);
Articolo libro3 = new Libro("030",10);
Articolo disco3 = new Disco("040",6);
Magazzino magazzino = new Magazzino();
magazzino.aggiungiArticolo(libro1,10);
magazzino.aggiungiArticolo(disco1,20);
magazzino.aggiungiArticolo(disco2,14);
magazzino.aggiungiArticolo(libro2,12);
magazzino.aggiungiArticolo(libro3,12);
magazzino.aggiungiArticolo(disco3,10);
System.out.println(magazzino.getArticoli());
System.out.println(magazzino.calcolaValoreMagazzino());
System.out.println(magazzino.articoliEconomici(10));
System.out.println(magazzino.articoliOrdinatiPerCosto());
}
}
il metodo che non va correttamente è questo:
public Map<Integer,Set<String>> articoliEconomici(int soglia)
La domanda dell'esercizio dice:
Scrivere il codice del metodo Map<Integer,Set<String>> articoliEconomici(int soglia) questo metodo
restituisce in una mappa gli articoli il cui costo unitario è inferiore ad una soglia (passata come parametro al metodo). Chiave
della mappa è un intero, che rappresenta un costo unitario; la mappa associa alla chiave un insieme dei codici degli articoli
che hanno costo unitario pari a quello della chiave (che comunque è inferiore alla soglia).
Nel MAIN ho fatto alcune prove, e con System.out.println(magazzino.articoliEconomici(10) ); dovrebbe stampare {5=[070] , 6=[050,040]} .Invece mi stampa {5=[040,050,070] , 6=[040,050,070]}. Non so come modificare il metodo articoliEconomici(int soglia)...
spero mi aiuterete...