Exercice simple en java
Résolu
anaanonyme
Messages postés
15
Date d'inscription
Statut
Membre
Dernière intervention
-
anaanonyme Messages postés 15 Date d'inscription Statut Membre Dernière intervention -
anaanonyme Messages postés 15 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Exercice simple en java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Iphone 14 simple - Guide
- Java apk - Télécharger - Langages
2 réponses
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?
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?
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.
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.
Remarque : aucun de ces deux codes n'est thread-safe,
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,