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
Bonsoir,

svp

j'ai des tableau avec la même dimension: j'ai mis le même conteur et le même indice i pour la boucle

sachant que c'est un code console pas de interface graphique

j'ai rempli les tableau tout est correcte alors je veux modifier les attribut des tableau

affichage est comme suit:

1. numero item: 1005 ; description chemise ; prix de revient: 185 prix de vente :200
2. numero item: 1045 ; description pantalon ; prix de revient: 185 prix de vente :200

                int numItem[] = new int[100];
                String descirption[] = new String[100];
                 double prixReviens[] = new double[100];
                double prixVente[] = new double[100];

ma question est la suivante comment modifier les attribue de la première ligne sans modifier celle de la deuxième ligne

quand j'essaye de modifier par exemple le prix de revient tout les ligne se modifient .


Merci

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
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.
0
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:57
@kX VOICI ce que j'ai fait

System.out.print("Saisir l'attribut que vous voulez changer : ");
                    attribut = clavier.nextLine();

                    trouve = false;

                    idx = 0;
                    while ((trouve == false) && (idx < ctr)) {

                        for (i = 0; i < ctr; i++) {
                            if ((attribut.equalsIgnoreCase(descirption[idx])) || (attribut.equalsIgnoreCase(Integer.toString(numItem[idx]))))
                                 
                                trouve = true;
                            else {
                                idx++;
                                i++;
                            }


                            if (trouve) {
                                System.out.print("Par quel terme voulez-vous le remplacer");


                                if (attribut.equalsIgnoreCase(Integer.toString(numItem[idx])))
                                    numItem[idx] = Integer.parseInt(clavier.nextLine());
                                if ((attribut.equalsIgnoreCase(descirption[idx]))) {
                                    descirption[idx] = clavier.nextLine();
                                }


                            } else
                                System.out.println("Le terme n'existe pas");



break;
0
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
package com.company;
import java.util.*;
import java.util.InputMismatchException;
public class Main {

    public static void main(String[] args) {

        Scanner clavier = new Scanner(System.in);
        int i;
        int numItem[] = new int[100];
        String descirption[] = new String[100];
        String sexe[] = new String[100];
        double prixReviens[] = new double[100];
        double prixVente[] = new double[100];
        int quantite[] = new int[100];
        int qteMin[] = new int[100];
        int origine[] = new int[100];
        boolean fin = false;
        boolean statut[] = new boolean[100];
        String input;
        int choix;
        int idx;
        String attribut;
        //String numero;


        boolean trouve, trouve1;
        int ctr = 0;

        while (fin == false) {
            System.out.println("1:Ajouter un vetememt");
            System.out.println("22:affichage" );
            System.out.println("2:Modifier la quqntitÉ en inventaire");
            System.out.println("3:Modifier le prix de revient");
            System.out.println("4:modifier le prix de vente");
            System.out.println("5:Modifier le statut");
            System.out.println("6:Supprimer un vetememt");
            System.out.println("7:liste des vetement actif");
            System.out.println("8:liste des vetememt perimÉ");
            System.out.println("9:liste de vetememt homme" )
            System.out.println("10:liste de vetemetn femme");
            System.out.println("11:liste de vetememt unisexe");
            System.out.println("12:Liste des item dont la quantite en inventaire et moindre aue la quqntite minimale");
            System.out.println("13:la liste des vêtements soit fabriqués par son entreprise, soit achetés auprès de ses fournisseurst");
            System.out.println("14:la valeur totale de  l’inventaire  en fonction du prix de vente");
            System.out.println("15:la valeur totale de  l’inventaire  en fonction du prix de revient");

            input = clavier.nextLine();
            choix = Integer.parseInt(input);


            switch (choix) {

                case 0:
                    fin = true;
                    break;

                case 1:

                    System.out.println("veuiller saisir le numero d'item");
                    numItem[ctr] = clavier.nextInt();
                    clavier.nextLine();

                    System.out.println("veuiller saisir la description");
                    descirption[ctr] = clavier.nextLine();


                    System.out.println("veuiller saisir le sexe");
                    sexe[ctr] = clavier.nextInt();
                    clavier.nextLine();

                    System.out.println("veuiller saisir le prix de revient");
                    prixReviens[ctr] = clavier.nextInt();
                    clavier.nextLine();

                    System.out.println("veuiller saisir le prix de vente");
                    prixVente[ctr] = clavier.nextInt();
                    clavier.nextLine();

                    System.out.println("veuillez saisir la quantite");
                    quantite[ctr] = clavier.nextInt();
                    clavier.nextLine();

                    System.out.println("veuillez saisir la quantite minimale");
                    qteMin[ctr] = clavier.nextInt();
                    clavier.nextLine();

                    System.out.println("veuillez saisir l'origine");
                    origine[ctr] = clavier.nextInt();
                    clavier.nextLine();


                    ctr++;
                    break;

                case 2:

                    for (i = 0; i < ctr; i++) {
                        System.out.println(+(i + 1) + "." + "le numero d'item:  " + numItem[i] + "  | " + "description:  " + descirption[i] + "  | " + "sexe:  " + sexe[i] + "| " + "prix de revient:  " + prixReviens[i] + "  | " + "  prix de vente:  " + prixVente[i] + "  | " + "quqntite:  " + quantite[i] + "  | " + "quantite minimale:  " + qteMin[i] + "  | " + "origine:  " + origine[i])+"  | "+"statut:  "+statut;

           /*System.out.println("description de l'item  "  + ": " + descirption[i]);
            System.out.println("sexe   " + sexe[i]);
            System.out.println( "  prix de revient " + prixReviens[i]);
            System.out.println(" prix de vente  "  + prixVente[i]);
            System.out.println(" quantite en inventaire " + quantite[i]);
           System.out.println("  quqntite mimimale " + qteMin[i]);
            System.out.println(" origine " + origine[i]);*/

                    }
                    break;

                case 3:

                    System.out.print("Saisir l'attribut que vous voulez changer : ");
                    attribut = clavier.nextLine();

                    trouve = false;

                    idx = 0;
                    while ((trouve == false) && (idx < ctr)) {

                        for (i = 0; i < ctr; i++) {
                            if ((attribut.equalsIgnoreCase(descirption[idx])) || (attribut.equalsIgnoreCase(Integer.toString(numItem[idx]))))

                                trouve = true;
                            else {
                                idx++;
                                i++;
                            }


                            if (trouve) {
                                System.out.print("Par quel terme voulez-vous le remplacer");


                                if (attribut.equalsIgnoreCase(Integer.toString(numItem[idx])))
                                    numItem[idx] = Integer.parseInt(clavier.nextLine());
                                if ((attribut.equalsIgnoreCase(descirption[idx]))) {
                                    descirption[idx] = clavier.nextLine();
                                }


                            } else
                                System.out.println("Le terme n'existe pas");


                            break;


                        }
                    }
        }
0
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
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 :
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
0
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
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






 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");

0