Modificqation des attribut

Signaler
Messages postés
12
Date d'inscription
mardi 10 novembre 2020
Statut
Membre
Dernière intervention
26 novembre 2020
-
Messages postés
12
Date d'inscription
mardi 10 novembre 2020
Statut
Membre
Dernière intervention
26 novembre 2020
-
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

Messages postés
16120
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
27 novembre 2020
2 738
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.
Messages postés
12
Date d'inscription
mardi 10 novembre 2020
Statut
Membre
Dernière intervention
26 novembre 2020

@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;
Messages postés
12
Date d'inscription
mardi 10 novembre 2020
Statut
Membre
Dernière intervention
26 novembre 2020

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;


                        }
                    }
        }
Messages postés
16120
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
27 novembre 2020
2 738
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
Messages postés
12
Date d'inscription
mardi 10 novembre 2020
Statut
Membre
Dernière intervention
26 novembre 2020

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