import [Link].
ArrayList;
import [Link];
interface IAffichable {
void afficherInformations();
abstract class Materiau implements IAffichable {
protected String nom;
protected double densite;
protected double prix_unitaire;
public Materiau(String nom, double densite, double prix_unitaire) {
[Link] = nom;
[Link] = densite;
this.prix_unitaire = prix_unitaire;
public abstract double calculer_masse(double volume);
public double calculer_cout(double volume) {
return calculer_masse(volume) * prix_unitaire;
// pour le Bois
class Bois extends Materiau {
private String essence;
private float taux_humidite;
private String classe_resistance;
public Bois(String nom, double densite, double prix_unitaire, String essence, float taux_humidite, String
classe_resistance) {
super(nom, densite, prix_unitaire);
[Link] = essence;
this.taux_humidite = taux_humidite;
this.classe_resistance = classe_resistance;
@Override
public double calculer_masse(double volume) {
double facteur_humidite = 1 + (taux_humidite / 100.0);
return densite * volume * facteur_humidite;
@Override
public void afficherInformations() {
[Link]("Bois: " + nom + ", Essence: " + essence +
", Taux Humidité: " + taux_humidite + "%" +
", Classe Résistance: " + classe_resistance);
// pour le Plastique
class Plastique extends Materiau {
private String type_polymere;
private double temperature_fusion;
private String rigidite;
private boolean estRecyclable;
public Plastique(String nom, double densite, double prix_unitaire,
String type_polymere, double temperature_fusion,
String rigidite, boolean estRecyclable) {
super(nom, densite, prix_unitaire);
this.type_polymere = type_polymere;
this.temperature_fusion = temperature_fusion;
[Link] = rigidite;
[Link] = estRecyclable;
public boolean peutEtreRecycle() {
return estRecyclable;
@Override
public double calculer_masse(double volume) {
return densite * volume;
@Override
public void afficherInformations() {
[Link]("Plastique: " + nom +
", Type: " + type_polymere +
", Temp. Fusion: " + temperature_fusion + "°C" +
", Recyclable: " + estRecyclable);
}
}
// pour l Acier
class Acier extends Materiau {
private String type_alliage;
private float resistance_traction;
private float module_young;
private boolean soudabilite;
public Acier(String nom, double densite, double prix_unitaire,
String type_alliage, float resistance_traction,
float module_young, boolean soudabilite) {
super(nom, densite, prix_unitaire);
this.type_alliage = type_alliage;
this.resistance_traction = resistance_traction;
this.module_young = module_young;
[Link] = soudabilite;
public boolean estSoudable() {
return soudabilite;
public double calculerResistanceSection(float aireSection) {
return resistance_traction * aireSection;
@Override
public double calculer_masse(double volume) {
return densite * volume;
@Override
public void afficherInformations() {
[Link]("Acier: " + nom +
", Alliage: " + type_alliage +
", Résistance: " + resistance_traction + " MPa" +
", Soudable: " + soudabilite);
// Classe principale
public class ProjetMateriau {
public static void main(String[] args) {
List<Materiau> matList = new ArrayList<>();
Acier acierInox304 = new Acier("Acier Inoxydable 304", 8000.0, 2.50,
"AISI 304", 520.0f, 193.0f, true);
Bois boisBambou = new Bois("Bambou", 650.0, 2.20,
"Bambusa vulgaris", 10.0f, "Variable");
Plastique pvc = new Plastique("PVC", 1380.0, 0.90,
"Polychlorure de vinyle", 80.0,
"Rigide", false);
[Link](acierInox304);
[Link](boisBambou);
[Link](pvc);
float volume = 1.0f;
for (Materiau m : matList) {
[Link]();
[Link]("Masse pour " + volume + " m³: " +
[Link]("%.2f", m.calculer_masse(volume)) + " kg");
[Link]("Coût pour " + volume + " m³: " +
[Link]("%.2f", m.calculer_cout(volume)) + " €");
if (m instanceof Bois) {
[Link]("→ C'est du bois.");
} else if (m instanceof Acier) {
Acier a = (Acier) m;
[Link]("→ C'est de l'acier.");
[Link](" Soudable ? " + [Link]());
[Link](" Résistance section (10cm²): " +
[Link]("%.2f", [Link](0.001f)) + " N");
} else if (m instanceof Plastique) {
Plastique p = (Plastique) m;
[Link]("→ C'est du plastique.");
[Link](" Recyclable ? " + [Link]());
[Link]("----------------------");
}
// pour trouver le matériau le moins cher
Materiau moinsCher = trouverMaterialLeMoinsCher(matList, volume);
if (moinsCher != null) {
[Link]("\nMatériau le moins cher pour " + volume + " m³:");
[Link]();
[Link]("Coût total: " +
[Link]("%.2f", moinsCher.calculer_cout(volume)) + " €");
public static Materiau trouverMaterialLeMoinsCher(List<Materiau> matList, float volume) {
if (matList == null || [Link]()) {
return null;
Materiau moinsCher = [Link](0);
double coutMin = moinsCher.calculer_cout(volume);
for (Materiau m : matList) {
double coutActuel = m.calculer_cout(volume);
if (coutActuel < coutMin) {
coutMin = coutActuel;
moinsCher = m;
return moinsCher;
}
}