Exercice simple en java

Résolu/Fermé
anaanonyme Messages postés 15 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 3 mars 2015 - 3 mars 2015 à 14:58
anaanonyme Messages postés 15 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 3 mars 2015 - 3 mars 2015 à 20:15
Bonjour j'ai un petit problème dans un code java très simple

j'ai une classe Article pour représenter les articles vendus dans un supermarché;

et je veux lors de la création d'un nouveau article vérifier si il y a un autre article avec la même référence

car c'est elle qui caractérise l'article de manière unique

voila le code j'espère qu'il est visible
public class Article {
 
    private long reference;
    private String intitule;
    private float prixHT;
    private int quantiteEnStock;
     
    public Article(long reference,String intitule,float prixHT,int quantiteEnStock){
         
        setReference(reference);
        setIntitule(intitule);
        setPrixHT(prixHT);
        setQuantiteEnStock(quantiteEnStock);
    }
 
    public String getIntitule() {
        return intitule;
    }
 
    public void setIntitule(String intitule) {
        this.intitule = intitule;
    }
 
    public long getReference() {
        return reference;
    }
 
    public void setReference(long reference) {
        this.reference = reference;
    }
 
    public float getPrixHT() {
        return prixHT;
    }
 
    public void setPrixHT(float prixHT) {
        this.prixHT = prixHT;
    }
 
    public int getQuantiteEnStock() {
        return quantiteEnStock;
    }
 
    public void setQuantiteEnStock(int quantiteEnStock) {
        this.quantiteEnStock = quantiteEnStock;
    }
     
    public void approvisionner(int nombreUnites){
        setQuantiteEnStock(nombreUnites+getQuantiteEnStock());
    }
    public boolean vendre(int nombreUnites)
    {
        if(nombreUnites<getQuantiteEnStock())
        {
        setQuantiteEnStock(getQuantiteEnStock()-nombreUnites);
        return true;
        }  
        else
        return false;
    }
    public float prixHT(){
        return getPrixHT();
    }
    public float prixTTC(){
        return (1+ (float)0.196)*getPrixHT();
        
    }
    public String toString ()
    {
        return(" l'article num:"+getReference()+" "+getIntitule()+" "+getPrixHT()+" et le quantite en stock est :"+getQuantiteEnStock());
        
    }
    public boolean equals(Article unArticle)
    {
        if(unArticle.getReference()==getReference())
            {System.out.println("true");
            return true;}
            else
                System.out.println("false");
                return false;
    }
public static void main(String[] args) {
         
Article[] articles;
articles=new Article[10];
articles [1]=new Article(1,"intitu",10,100);
articles [2]=new Article(2,"intitu2",20,200);
articles [3]=new Article(3,"intitu3",30,300);
articles [4]=new Article(4,"intitu4",40,400);
 
//articles[1].equals(articles[2]);
articles[1].approvisionner(10);
 
articles[1].vendre(100);
//System.out.println(articles[1]);
//articles[1].prixTTC();
System.out.println (articles[2].prixTTC());
for(int i=1;i<4;i++){
    System.out.println (articles[i]);  
}
}
}
A voir également:

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
3 mars 2015 à 17:47
Bonjour,

Et quel est ton problème ? Ta question ?
1
anaanonyme Messages postés 15 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 3 mars 2015 1
3 mars 2015 à 19:47
Salut,merci pour votre réponse;
le problème c'est que je peux créer deux objets avec la même référence tandis que chaque article a sa propre référence.
comment puis-je indiquer au constructeur que si la référence existe déjà il ne doit pas créer l'objet?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 3/03/2015 à 20:12
Basiquement de deux manières :

1) la référence est gérée directement par la classe, via un compteur static auto-incrémenté par exemple.

private final long reference;
private static nextReference = 1;

public Article(String intitule,float prixHT,int quantiteEnStock){
    reference = nextReference++;
    setIntitule(intitule);
    setPrixHT(prixHT);
    setQuantiteEnStock(quantiteEnStock);
}

Remarque : dans ce cas il faut supprimer la méthode setReference, car si tu autorises à la modifier tu n'as plus de garantie quant à son unicité.

2) tu enregistres toutes les références déjà utilisées et tu lèves une exception lorsque tu veux modifier une référence par une valeur déjà prise.

private static Set<Long> allReferences = new TreeSet<Long>();

public void setReference(long reference) throws IllegalArgumentException {
    if (allReferences.contains(reference))
        throw new IllegalArgumentException("reference already used: "+reference);

    allReferences.remove(this.reference);
    allReferences.add(reference);

    this.reference = reference;
}

Remarque : aucun de ces deux codes n'est thread-safe,
0
anaanonyme Messages postés 15 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 3 mars 2015 1 > KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024
3 mars 2015 à 20:15
Merci beaucoup pour votre temps :)
la première méthode marche très bien mais pour la deuxième j'ai compris l'idée mais pas le code(TreeSet,< >...),mais je vais chercher merci beaucoup
0