Modificqation des attribut
Fermé
mimi19911980
Messages postés
22
Date d'inscription
mardi 10 novembre 2020
Statut
Membre
Dernière intervention
14 octobre 2021
-
Modifié le 11 nov. 2020 à 08:56
mimi19911980 Messages postés 22 Date d'inscription mardi 10 novembre 2020 Statut Membre Dernière intervention 14 octobre 2021 - 12 nov. 2020 à 06:26
mimi19911980 Messages postés 22 Date d'inscription mardi 10 novembre 2020 Statut Membre Dernière intervention 14 octobre 2021 - 12 nov. 2020 à 06:26
A voir également:
- Modificqation des attribut
- Attribut changer - Télécharger - Divers Utilitaires
- Aucun attribut manifest principal ✓ - Forum Java
- Importer attribut excel vers autocad - Forum Bureautique
- Remplir des attributs d'Autocad via Excel - Forum Programmation
- Executer un jar ✓ - Forum Java
3 réponses
KX
Messages postés
16734
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 avril 2024
3 015
10 nov. 2020 à 22:33
10 nov. 2020 à 22:33
Bonjour,
Tes explications et les quelques lignes de code que tu donnes ne sont pas suffisantes pour bien comprendre.
Il faudrait voir ton code dans son ensemble pour pouvoir tester et reproduire le bug.
Tes explications et les quelques lignes de code que tu donnes ne sont pas suffisantes pour bien comprendre.
Il faudrait voir ton code dans son ensemble pour pouvoir tester et reproduire le bug.
KX
Messages postés
16734
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 avril 2024
3 015
11 nov. 2020 à 10:21
11 nov. 2020 à 10:21
Tout cela est... très peu conventionnel.
Java est un langage objet et clairement ici ce dont tu as besoin c'est de faire des objets.
Exemple :
Pour reprendre une partie de ton code ça pourrait donner ceci :
Toutefois je trouve les tableaux peu adapté à ton code, il faudrait se servir davantage de ton numéro d'item, pour t'en servir comme clé au sein d'une Map. Exemple :
Remarque : tu devrais aussi créer des méthodes pour éviter les copier-coller, ce qui permet également de clarifier le code, car chaque petite portion de code est ainsi clairement identifiée. Exemple :
Quant à ta recherche, je ne vais pas regarder pourquoi elle est fausse avec les tableaux, même si c'est très certainement lié à une confusion entre tes multiples indices i, idx, ctr...
Je pense qu'il faut procéder en deux temps : d'abord lister les articles qui correspondent à un terme de recherche, puis choisir un de ces articles pour savoir lequel tu vas modifier, sinon effectivement tu risques d'en modifier trop.
Dans la classe Article tu peux faire une petite méthode comme ça :
Puis dans ton main, dans un des case du switch, tu fais la recherche :
Et dans un autre case du switch, tu fais une modification, par exemple la description :
Remarque : dans un switch tu n'est pas obligé de mettre uniquement des entiers, tu peux par exemple mettre des String ce qui permet de faciliter les actions utilisateurs. De plus il vaudrait mieux que chaque case renvoie à une méthode séparée pour alléger le main et séparer les variables. Exemple :
Le code complet pour tester :
Exemple d'exécution :
Java est un langage objet et clairement ici ce dont tu as besoin c'est de faire des objets.
Exemple :
class Article { int numItem; String description; public String toString(){ return "[numItem=" + numItem + ", description=" + description + "]"; } }
Pour reprendre une partie de ton code ça pourrait donner ceci :
Article[] articles = new Article[100]; case 1: Article article = new Article(); System.out.println("veuiller saisir le numero d'item"); article.numItem = clavier.nextInt(); clavier.nextLine(); System.out.println("veuiller saisir la description"); article.description = clavier.nextLine(); articles[ctr] = article; ctr++; break;
Toutefois je trouve les tableaux peu adapté à ton code, il faudrait se servir davantage de ton numéro d'item, pour t'en servir comme clé au sein d'une Map. Exemple :
Map<Integer, Article> articles = new TreeMap<>(); case 1: Article article = new Article(); System.out.println("veuiller saisir le numero d'item"); article.numItem = clavier.nextInt(); clavier.nextLine(); System.out.println("veuiller saisir la description"); article.description = clavier.nextLine(); articles.put(article.numItem, article); break;
Remarque : tu devrais aussi créer des méthodes pour éviter les copier-coller, ce qui permet également de clarifier le code, car chaque petite portion de code est ainsi clairement identifiée. Exemple :
private static final Scanner clavier = new Scanner(System.in); private static String nextString(String label) { System.out.print("Veuillez saisir " + label + " (texte) : "); return clavier.nextLine(); } private static int nextInt(String label) { System.out.print("Veuillez saisir " + label + " (entier) : "); return Integer.parseInt(clavier.nextLine()); }
case 1: Article article = new Article(); article.numItem = nextInt("le numero d'item"); article.description = nextString("la description");
Quant à ta recherche, je ne vais pas regarder pourquoi elle est fausse avec les tableaux, même si c'est très certainement lié à une confusion entre tes multiples indices i, idx, ctr...
Je pense qu'il faut procéder en deux temps : d'abord lister les articles qui correspondent à un terme de recherche, puis choisir un de ces articles pour savoir lequel tu vas modifier, sinon effectivement tu risques d'en modifier trop.
Dans la classe Article tu peux faire une petite méthode comme ça :
public boolean match(String token) { return token.equalsIgnoreCase(description) || token.equals(String.valueOf(numItem)); }
Puis dans ton main, dans un des case du switch, tu fais la recherche :
String attribut = nextString("l'attribut de recherche"); articles.forEach((numItem, article) -> { if (article.match(attribut)) System.out.println("Correspondance avec " + article); });
Et dans un autre case du switch, tu fais une modification, par exemple la description :
int numItem = nextInt("le numéro d'item à modifier"); Article article = articles.get(numItem); System.out.println("La description est : " + article.description); article.description = nextString("la nouvelle description");
Remarque : dans un switch tu n'est pas obligé de mettre uniquement des entiers, tu peux par exemple mettre des String ce qui permet de faciliter les actions utilisateurs. De plus il vaudrait mieux que chaque case renvoie à une méthode séparée pour alléger le main et séparer les variables. Exemple :
switch (nextString("une action")) { case "add": add(); break; case "search": search(); break; case "modifDesc": modifDesc(); break; case "exit": return; }
Le code complet pour tester :
package com.company; import java.util.*; class Article { int numItem; String description; public String toString(){ return "[numItem=" + numItem + ", description=" + description + "]"; } public boolean match(String token) { return token.equalsIgnoreCase(description) || token.equals(String.valueOf(numItem)); } } public class Main { private static final Scanner clavier = new Scanner(System.in); private static String nextString(String label) { System.out.print("Veuillez saisir " + label + " (texte) : "); return clavier.nextLine(); } private static int nextInt(String label) { System.out.print("Veuillez saisir " + label + " (entier) : "); return Integer.parseInt(clavier.nextLine()); } private static Map<Integer, Article> articles = new TreeMap<>(); private static void add(){ Article article = new Article(); article.numItem = nextInt("le numero d'item"); article.description = nextString("la description"); articles.put(article.numItem, article); } private static void search(){ String attribut = nextString("l'attribut de recherche"); articles.forEach((numItem, article) -> { if (article.match(attribut)) System.out.println("Correspondance avec " + article); }); } private static void modifDesc(){ int numItem = nextInt("le numéro d'item à modifier"); Article article = articles.get(numItem); System.out.println("La description est : " + article.description); article.description = nextString("la nouvelle description"); } public static void main(String[] args) { while (true) { System.out.println("# add ajouter un article"); System.out.println("# search chercher un article"); System.out.println("# modifDesc modifier la description"); System.out.println("# exit quitter le programme"); switch (nextString("une action")) { case "add": add(); break; case "search": search(); break; case "modifDesc": modifDesc(); break; case "exit": return; } } } }
Exemple d'exécution :
Veuillez saisir une action (texte) : add Veuillez saisir le numero d'item (entier) : 42 Veuillez saisir la description (texte) : toto Veuillez saisir une action (texte) : search Veuillez saisir l'attribut de recherche (texte) : toto Correspondance avec [numItem=42, description=toto] Veuillez saisir une action (texte) : modifDesc Veuillez saisir le numéro d'item à modifier (entier) : 42 La description est : toto Veuillez saisir la nouvelle description (texte) : tata Veuillez saisir une action (texte) : search Veuillez saisir l'attribut de recherche (texte) : 42 Correspondance avec [numItem=42, description=tata] Veuillez saisir une action (texte) : exit
mimi19911980
Messages postés
22
Date d'inscription
mardi 10 novembre 2020
Statut
Membre
Dernière intervention
14 octobre 2021
Modifié le 12 nov. 2020 à 07:09
Modifié le 12 nov. 2020 à 07:09
merci pour votre réponse
svp j'ai ce code la pour la modification de du valeur du tableau. Le problème c'est que il modifie juste la première ligne il modifie pas les autre
c'est quoi le problème svp
svp j'ai ce code la pour la modification de du valeur du tableau. Le problème c'est que il modifie juste la première ligne il modifie pas les autre
c'est quoi le problème svp
System.out.print("Saisir le numero que vous vouler changer : "); numItem[ctr] = clavier.nextInt(); System.out.print("Saisir la quqntite que vous vouler changer : "); attribut = String.valueOf(clavier.nextInt()); trouve = false; idx = 0; while ((trouve == false) && (idx < ctr)) { for (i = 0; i < ctr; i++) { if (Objects.equals(numItem[ctr], numItem[idx])) if (attribut.equalsIgnoreCase(Integer.toString((int) quantite[idx]))) trouve = true; else { idx++; i++; } if ((trouve) && (Objects.equals(numItem[ctr], numItem[idx]))) { System.out.print("Par quel quantité voulez-vous la remplacer"); //if (attribut.equalsIgnoreCase(Integer.toString(numItem[idx]))) // numItem[idx] = Integer.parseInt(clavier.nextLine()); if ((attribut.equalsIgnoreCase(Integer.toString((int) quantite[idx]))) && (Objects.equals(numItem[ctr], numItem[idx]))) { quantite[idx] = clavier.nextInt(); clavier.nextLine(); } } } } System.out.println("Le terme n'existe pas");
Modifié le 11 nov. 2020 à 08:57
Modifié le 11 nov. 2020 à 08:56