Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de déclaration dans une classe

Sauvegarde

Sujet résolu
29 mai 2016 à 17:06:47

Bonjour,

Voilà, j'ai un problème sur une déclaration de variable. Quand j'encode une valeur à une variable d'une liste <hash map>, je peux la modifer la première fois que j'encode un objet (menu == 1 puis menu == 5) mais une fois que je quitte mon programme en sauvegardant (menu == 8) et que je veux modifier le stock, j'ai une erreur que je ne comprends pas.

Merci d'avance

--> Classe principal

import java.io.IOException;
import java.util.*;
public class GestionStock{
 public static void main(String [] argument) throws IOException  {
    byte choix = 0, entrer=0, menu=0;
    String util = null, motde = null, nom;
     boolean co = false;
    int i, Gestion = 0, demand = 0, a=0;
    StockList C = new StockList();
    UtilisateurList B = new UtilisateurList();
    FichierStock F = new FichierStock();
    FichierCompte A = new FichierCompte();
      if (F.ouvrir("L")) {
            C = F.lire();
            F.fermer() ;
            }
      if (A.ouvrir("L")) {
        B = A.lire();
        A.fermer() ;
        }
      Scanner lc = new Scanner(System.in);
 
do   {
        System.out.println("1. Ajouter un article");
        System.out.println("2. retirer un article du stock");
        System.out.println("3. Afficher le stock");
        System.out.println("4. Afficher un article");
        System.out.println("5. Modifier le stock");
        System.out.println("6. Afficher les comptes");
        System.out.println("7. Supprimer un compte");
        System.out.println("8. Pour sortir");
        System.out.print("Votre choix : ");
        choix  = lc.nextByte();
        switch (choix) {
            case 1 :       
                C.ajouteUnArticle();
                 
            break;
            case 2 :
                System.out.print("Entrer le nom de l'article a supprimer : ");
                nom = lc.next();
                C.supprimeUnArticle(nom);
            break;
            case 3:    
                C.afficheLeStock();
            break;
            case 4 :
                System.out.print("Entrer le nom de l'article a affiché : ");
                nom = lc.next();
                C.rechercheUnArticle(nom);
            break;
            case 5:
                System.out.print("Entrer le nom de l'article dont vous voulez modifier le stock : ");
                nom = lc.next();
                C.modifStock(nom);
                break;
            case 6 :
                 B.afficheLesComptes();
                 break;
            case 7:
                  
                break;
            case 8 :       
                System.out.print("Sauvegarde des données dans Stock.dat");
                F.ouvrir("Ecriture");
                F.ecrire(C);
                F.fermer();
                A.ouvrir("Ecriture");
                A.ecrire(B);
                A.fermer();
                System.exit(0);
                 
                break;
            default :
            System.out.println("Cette option n'existe pas ");
        }
    } while (choix != 8);
 }
 }

--> Liste

import java.io.Serializable;
import java.util.*;
 public class StockList implements Serializable{
 private HashMap<String, Stock>  Article;
 public StockList()   {
    Article = new HashMap<String,Stock>();       
 }
 public void ajouteUnArticle() {
     Stock nouveau = new Stock();
     String clé = créerUneClé(nouveau);
     if (Article.get(clé)==null)
         {
            Article.put(clé, nouveau);
         }
     else {
         System.out.println("Cet article a déjà encodé !");
     }
 }
 public void modifStock(String n)
    {
         
        String clé = créerUneClé(n);
        Stock eClassé = (Stock) Article.get(clé);
        if (eClassé != null)
        {
             
            eClassé.modifStoc();
        }
        else
        {
            System.out.println(n + " est inconnu ! ");
        }
    }
 public void achatArticle(String n)
    {
        String clé = créerUneClé(n);
        Stock eClassé = (Stock) Article.get(clé);
        if (eClassé != null)
        {
            eClassé.achat();
        }
        else
        {
            System.out.println(n + " est inconnu ! ");
        }
    }
public void afficheLeStock()
    {
    if(Article.size() != 0) {
        Collection c = Article.values();
        for (Iterator i = c.iterator() ; i.hasNext();) {
            Stock e = (Stock) i.next();
            e.afficheUnArticle();
        }
    }else
        {
            System.out.println("Il n'y a pas d'article dans le stock");
        }
    }
public void afficheLesArticles()
{
if(Article.size() != 0) {
    Collection c = Article.values();
    for (Iterator i = c.iterator() ; i.hasNext();) {
        Stock e = (Stock) i.next();
        e.afficheUnArticleCommercant();
    }
}else
    {
        System.out.println("Il n'y a pas d'article dans le stock");
    }
}
private String créerUneClé(String n)
    {
        String tmp;
        tmp = n.charAt(0)+ n;
    return tmp.toUpperCase();
    }
    private String créerUneClé(Stock e)
    {
        String tmp;
        tmp = (e.quelNom()).charAt(0)+ e.quelNom();
        return tmp.toUpperCase();
    }
     
 public void rechercheUnArticle(String n) {
    String clé = créerUneClé(n);
    Stock eClassé = (Stock) Article.get(clé);
    if (eClassé != null)
    {
        eClassé.afficheUnArticle();
    }
    else
    {
        System.out.println(n + " est inconnu ! ");
    }
 }
  
public void supprimeUnArticle(String n) {
    String clé = créerUneClé(n);
    Stock eClassé = (Stock) Article.get(clé);
    if (eClassé != null) {
        Article.remove(clé);
        System.out.println(n + " a été supprimé");
    }
    else
        {
            System.out.println(n + " est inconnu ! ");
        }
}
}

 --> Classe des valeurs listées

import java.io.Serializable;
import java.util.*;
public class Stock implements Serializable{
    private String nom;
    private int ref, nombre, i, quantite=0, z;
    transient Scanner lc = new Scanner(System.in);
    public Stock() {
        System.out.print("Entrer le nom de l'article : ");
        this.nom = lc.next();
        System.out.print("Entrer la référence: ");
        this.ref = lc.nextInt();
        this.nombre=lc.nextInt();
        this.quantite=0;
        this.z = 0;
    }
     
    public void modifStoc()
    {
        System.out.println("Combien voulez-vous en mettre dans le stock?");    
        z = lc.nextInt();
        nombre=z+nombre;
        System.out.println("Je modifie le stock !");
    }
    public int achat()
    {
        do
        {
            System.out.print("Quantité voulue: ");
            quantite = lc.nextInt();
            nombre=nombre-quantite;
            if(nombre<0)
            {
                System.out.print("Nous en avons plus assez. Il nous en reste" +nombre);
            }
        }while(nombre<0);
        return nombre;
    }
    public void afficheUnArticleCommercant()  {
        System.out.println(nom +" : ");
    }
    public void afficheUnArticle()  {
        System.out.println(nom +" : "+getNombre());
    }
    public String quelNom() {
        return nom;
    }
    public void setNombre() {
        this.nombre = nombre;
        }
    public int getNombre() {
        return nombre;
        }
}

--> Fichier de sauvegarde

import java.io.*;
public class FichierStock{
	
private ObjectOutputStream ofW; //w = Pour écrire dans le fichier
private ObjectInputStream ofR; //r = Lire dans le fichier
private String nomDuFichier = "Stock.dat"; //Créer le fichier
private char mode; // Dire si on lit ou écrit

public void ecrire(StockList tmp) throws IOException{
if (tmp != null) {ofW.writeObject(tmp);}
}
public void fermer() throws IOException {
if (mode == 'R' || mode == 'L') ofR.close();
else if (mode == 'W' || mode == 'E') ofW.close();
}
public StockList lire() {
	try {
		StockList tmp = (StockList) ofR.readObject();
		return tmp;
	}
	catch (IOException e) {
			System.out.println(nomDuFichier + " : Erreur de lecture ") ;
	}
catch (ClassNotFoundException e) {
System.out.println(nomDuFichier + " n'est pas du bon format ") ;
}
return null;
}

public boolean ouvrir(String s) {
try {
mode = (s.toUpperCase()) .charAt(0);
if (mode == 'R' || mode == 'L')
ofR = new ObjectInputStream(new FileInputStream(nomDuFichier));
else if (mode == 'W' || mode == 'E')
ofW = new ObjectOutputStream(new FileOutputStream(nomDuFichier));
return true;
}
catch (IOException e) {
return false;
}
}
}




  • Partager sur Facebook
  • Partager sur Twitter
30 mai 2016 à 14:59:27

Bonjour,

Est-ce que tu peux mettre le message d'erreur que tu obtiens.

  • Partager sur Facebook
  • Partager sur Twitter
30 mai 2016 à 17:56:13

Bien sûr, 
La ligne d'erreur du gestionStock (qui est la classe principal dont je dois renommer)  n'est pas correcte car j'ai mis des lignes en commentaire sur mon programme mais elle fait référence lorsque j'appuie sur et fait appelle à la fonction

  • Partager sur Facebook
  • Partager sur Twitter
31 mai 2016 à 10:06:14

Je ne sais pas à quelle ligne cela correspond car comme tu le précises, tu n'as pas mis toutes les lignes. Tu peux nous dire à quelle ligne ça correspond?

En tout cas, l'exception indique que tu as un NullPointerException. Cela signifie qu'à la ligne en question, tu essayes de faire quelque chose sur une variable qui est null (par exemple tu fais maVariable.maMethode() avec maVariable = null, ce qui génère l'exception).

Pour régler ce problème soit tu lances le mode debug, soit tu fais des affichages avec des prints.

  • Partager sur Facebook
  • Partager sur Twitter
31 mai 2016 à 12:09:58

je t'envoie un  screen des endroits où il me dit qu'il y a une erreur. 

--> Situé dans la classe Stock, lorsque je fais .modifStock

--> Situé dans la classe de la liste HashMap

-->Situé dans la classe principale lorsque je fais appelle à al méthode modifStock dans ma classe Hierarchisé

Ok, je prends tes explications en compte. Si je réussi à résoudre l'erreur je te le dirai pour pas que tu ne cherches pour rien ;) 

Merci.

  • Partager sur Facebook
  • Partager sur Twitter
31 mai 2016 à 12:16:52

Sinon j'ai déjà essayé plusieurs fois en mode debug et chaque variable contient une valeur :/

-
Edité par Fapinski 31 mai 2016 à 12:19:16

  • Partager sur Facebook
  • Partager sur Twitter
31 mai 2016 à 12:32:02

Salut Fapinski,

     Il semble que ton erreur vienne plutôt du Scanner. Essaye de l'instancier à chaque utilisation ou d'en déclarer un nouveau dans tes menus.

-
Edité par Anniballe 31 mai 2016 à 12:33:22

  • Partager sur Facebook
  • Partager sur Twitter
31 mai 2016 à 12:39:14

Merci, j'aurai jamais pensé à ça.

Je te remercie mille fois...... :D 

  • Partager sur Facebook
  • Partager sur Twitter
31 mai 2016 à 12:41:43

Sujet résolu s'il te plait.

( et petit pouce :p )

  • Partager sur Facebook
  • Partager sur Twitter