JAVA : le Tableau n'enregistre pas les elements

Fermé
karimgn Messages postés 3 Date d'inscription dimanche 23 septembre 2012 Statut Membre Dernière intervention 20 octobre 2012 - 20 oct. 2012 à 01:47
karimgn Messages postés 3 Date d'inscription dimanche 23 septembre 2012 Statut Membre Dernière intervention 20 octobre 2012 - 20 oct. 2012 à 22:07
Bonjour,
Quelqu'un pourrait t-il m'expliquer pourquoi ce code ne fonctionne pas SVP..
Au fait mon intention c'est d'enregistrer un ensemble d'élements de type article dans le tableau donc dans la même classe j'ai crée un tableau de type de la classe pour pouvoir stocker les éléments ds la tableau. le hic est que eclipse ne signale pas d'erreur mais quand je compile aucun élément ne s'enregistrer dans le tableau et ça m'affiche des erreurs qui causent l'arrêt de l'exécution dès l'essai d'enregistrement. J'ai essayé avec les arraylist aussi mais des erreurs. Merci pour vos remarques et recommandations. voici le code :

import java.util.*;
public class Article {
private String nom;
private String marque;
private double p_ach;
private double p_vente;
private int qte_min;
private int seuil;
private String categ;
static int nb_art;
Article tab[] = new Article [nb_art];
// ArrayList <Article> t=new ArrayList <Article> ();
public void ajoutArticle(){
Scanner scan= new Scanner (System.in);
String nm; String mque, catg; double ach,vte; int seuil;
System.out.println("donner le nombre d article à enregistrer");
nb_art=scan.nextInt();

for (int i=0; i<nb_art;i++)
{ System.out.println("Saisir le nom du "+(i+1)+" article a enregistrer");
nm=scan.nextLine(); //t.add(i, this.nom); //
tab[i].nom=nm;
System.out.println("la marque?");
mque= scan.next(); tab[i].marque=mque;
System.out.println("le Prix d'achat?");
ach= scan.nextDouble(); tab[i].p_ach=ach;
System.out.println("le prix de vente ");
vte=scan.nextDouble();tab[i].p_vente=vte;
System.out.println("le seuil ");
seuil=scan.nextInt();tab[i].seuil=seuil;
System.out.println("la categorie ");
catg=scan.nextLine();tab[i].categ=catg;
}
System.out.println("l'article a bien été enregistré.");}


public void affich()
{
for (int i=0; i<nb_art;i++)
{
System.out.print("le nom de l'article "+i+1+"est:"+tab[i].nom);
System.out.print("la marque de l'article est "+i+1+"est:"+tab[i].marque);
System.out.print("le prix d'achat de l'article "+i+1+"est:"+tab[i].p_ach);
System.out.print("le prix de vente de l'article "+i+1+"est:"+tab[i].p_vente);
System.out.print("la categorie de l'article est "+i+1+"est:"+tab[i].categ);
}}
}


import java.io.*;
import java.util.*;

public class PremierProg
{

public static void main(String[] args)throws IOException, NumberFormatException
{
Article art = new Article (); String rep;

do{
System.out.println("Bienvenu dans l'application de GESTION de STOCK");
System.out.println(" ---MENU PRINCIPAL---");
System.out.println("|1-Ajout d'un article |");
System.out.println("|2-Recherche d'un article | ");
System.out.println("|3-Affichage d'un ou plusieurs articles|");
System.out.println("|3-Suppression d'un article |");
System.out.println("|4- Quitter l'application |");
System.out.println("");
System.out.println("Faites votre choix:");
int choix;
{
Scanner scan=new Scanner(System.in);
//ArrayList <Article> tab = new ArrayList<Article>();
choix=scan.nextInt();
}

switch (choix)
{
case 1: {art.ajoutArticle(); break;}
case 2: {art.affich();}
}
System.out.println("voulez vous faire une autre operation?");
Scanner scan =new Scanner(System.in);
rep=scan.next();
}while((rep.charAt(0)!='N')||( rep.charAt(0)!='n'));

}

}
A voir également:

2 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
20 oct. 2012 à 08:52
Quand tu fais :
static int nb_art;
Article tab[] = new Article [nb_art];
nb_art vaut par défaut 0, donc tab est de taille 0 aussi.

Lorsque tu fais :
nb_art=scan.nextInt();
Cela modifie nb_art, mais pas tab (qui est toujours de taille 0)

Donc quand tu as :
tab[i].nom=nm;
tab[i] n'existe pas (quelque soit i, vu que tab est de taille 0), c'est pour ça que tu as avoir une erreur dès i=0 :
java.lang.ArrayIndexOutOfBoundsException: 0
Ce qu'il faut faire c'est bien dimensionner ton tableau !

L'utilisation des listes était certainement la bonne idée, mais pas n'importe comment :
t.add(i, this.nom);
La méthode add(int, E) n'existe pas dans ArrayList<E>, il faudrait tout simplement utiliser add(E) mais en faisant attention à ce qu'est <E>, car tu utilises ArrayList<Article> mais ça ne peut pas marcher en ajoutant this.nom qui est String...
0
karimgn Messages postés 3 Date d'inscription dimanche 23 septembre 2012 Statut Membre Dernière intervention 20 octobre 2012
20 oct. 2012 à 22:07
KX Merci.. j'ai essayé mais ca marche pas, j'ai fixé la taille du tableau à 50 ensuite essayé un parcours jusqu'a 3 mais ca marche pas pour l'instant..
0