1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class MonObjet {
private float poids = 0;
private int valeur = 0;
public MonObjet(int valeur, float poids) {
this.valeur = valeur;
this.poids = poids;
}
public float getPoids() {
return poids;
}
public int getValeur() {
return valeur;
}
public float getRapport(){
if(poids <= 0){
throw new RuntimeException("Objet n'ayant pas de poids.");
}
return valeur/poids;
}
public static class MonComparateur implements Comparator<MonObjet> {
@Override
public int compare(MonObjet o1, MonObjet o2) {
if(o1.getRapport() < o2.getRapport()){
return 1;
}
if (o1.getRapport() > o2.getRapport()){
return -1;
}
return 0;
}
}
public static void main(String[] args) {
//Je déclare le poids maximum du sac
float poidsMax = 5;
// Je déclare la liste d'objet disponible
List<MonObjet> listObjet = new ArrayList<MonObjet>();
listObjet.add(new MonObjet(5, 3));
listObjet.add(new MonObjet(1,4));
listObjet.add(new MonObjet(3, 2));
listObjet.add(new MonObjet(2, 1));
// Je trie la liste du plus remtable au moins rentable.
Collections.sort(listObjet, new MonComparateur());
// J'affiche les rapports pour vérifier l'état de ma liste
System.out.println("Voici la liste d'objet que j'ai à ma disposition");
afficheMaListe(listObjet);
// Je déclare le poids disponible du sac
float poidsDisponible = poidsMax;
// Je déclare ma liste représentant mon sac
List<MonObjet> monSac = new ArrayList<MonObjet>();
for (MonObjet monObjet : listObjet) {
//Si l'objet rentre, je l'ajoute
if(poidsDisponible> monObjet.getPoids()){
poidsDisponible -= monObjet.getPoids();
monSac.add(monObjet);
}
}
// J'affiche les rapports pour vérifier l'état de ma liste
System.out.println("Voici la liste d'objet que j'ai pris dans mon sac");
afficheMaListe(monSac);
}
private static void afficheMaListe(List<MonObjet> listObjet) {
for (MonObjet monObjet : listObjet) {
System.out.println("("+monObjet.getValeur()+","+monObjet.getPoids()+") => "+monObjet.getRapport());
}
}
} |
Partager