2016-09-19 2 views
-4

я создал простую программу Java для управления магазином коммерческих компаний Я использую NetBeans 8.0.2, здесь Magasins.javaтрудность выполнения на моей Java программе

package tn.tuniprob.gestionmagasin; 

import java.util.*; 
public class Magasins { 
    private int id; 
    private String adresse; 
    private final int CAPACITE=50; 
    private Produit []tab=new Produit[CAPACITE]; 
public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

public String getAdresse() { 
    return adresse; 
} 

public void setAdresse(String adresse) { 
    this.adresse = adresse; 
} 

public int getCapacite() { 
    return CAPACITE; 
} 



public Produit[] getTab() { 
    return tab; 
} 

public void setTab(Produit[] tab) { 
    this.tab = tab; 
} 


public void ajouterproduit(int i) 
    { String nom = null; 
     String marque=null; 
     float prix=0; 
     int idp=0; 
     Scanner sc1 = new Scanner(System.in); 
    if((i<CAPACITE)&&(i<50)) 
    { for (int j=0;j<i;j++) 
    { 
     System.out.println("entrez l'id"); 
     idp=sc1.nextInt(); 
     System.out.println("entrez le nom"); 
     nom=sc1.nextLine(); 
     nom=sc1.nextLine(); 
     System.out.println("entrez la marque"); 
     marque=sc1.nextLine(); 
     } 
     for (int j=0;j<i;j++) 
     { if (idp==tab[i].getid()) 
     {System.out.println("objet dupliqué");} 
     if (i==CAPACITE) 
       System.out.println("magazin complet"); 
    else { 
       for (j=0;j<i;j++) 
       System.out.println("objet dupliqué"); 
       this.tab[i].setid(idp); 
       this.tab[i].setlibelle(nom); 
       this.tab[i].setmarque(marque); 
     } 
    }}} 



public void afficher() 



{ for(int j=0;j<CAPACITE;j++) 

     System.out.println("d'abord le magazin: id="+id 
          +" adresse="+adresse+" capacite="+CAPACITE+ 
          "\n produits: numero"+j+" id="+tab[j].getid()+" libelle=" 
          +tab[j].getlibelle()+" marque="+tab[j].getmarque()+" prix=" 
          +tab[j].getprix()+" date d'expiration=" 
          +tab[j].getDate_expiration()+"\n"); 


} 

public void affichernbtotal() 
{ int somme=0; 

    for(int j=0;j<CAPACITE;j++) 
    { 
    if(null!=tab[j]) { 
     somme=somme+1; 

    } } 
    System.out.println("le nombre total des produits est="+somme);} 
public int comparer(Produit p) 

{for (int j=0;j<CAPACITE; j++) 
if ((p.getid()==tab[j].getid())&&(p.getlibelle()==tab[j].getlibelle())&&(p.getprix()==tab[j].getprix())) 
return 1; 

    return 0; 
    } 

public int comparer(Produit p1,Produit p2) 



{if((p1.getid()==p2.getid())&&(p1.getlibelle()==p2.getlibelle())&&(p1.getprix()==p2.getprix())) 
    {return 1;} 
    else 
    {return 0;} 
    } 




public boolean chercher(int id) 
    {for(int j=0;j<CAPACITE;j++) 
    if(tab[j].getid()==id) 
     return true; 
    return false; 
    } 

public void supproduit(int i) 
{ 
    tab[i].setid(0); 
    tab[i].setlibelle(null); 
    tab[i].setmarque(null); 
    tab[i].setprix(0); 

} 
public Magasins comparer(Magasins m1, Magasins m2) 
{ 
    int s1=0,s2=0; 
    for(int i=0; i<CAPACITE;i++) 
     if((m1.tab[i].getmarque()!=null)) 
      s1++; 
    for(int i=0; i<CAPACITE;i++) 
    if (m2.tab[i].getmarque()!=null) 
     s2++; 
    return ((s1<s2)?m2:m1); 
} 








} 

и это Produit.java

package tn.tuniprob.gestionmagasin; 

import java.util.Date; 
public class Produit { 
    private int id; 
    private String libelle; 
    private String marque; 
    private float prix; 
    private Date date_expiration; 

    public Produit(int id, String libelle, String marque, float prix) { 
     this.id = id; 
     this.libelle = libelle; 
     this.marque = marque; 
     this.prix = prix; 

    } 


    public int getid() 
    {return id;} 
    public void setid(int a) 
    {id=a;} 
    public String getlibelle() 
    {return libelle;} 
    public void setlibelle(String a) 
    {libelle=a;} 
    public String getmarque() 
    {return marque;} 
    public void setmarque(String a) 
    {marque=a;} 
    public float getprix() 
    {return prix;} 
    public void setprix(float a) 
    {if (a<=0) System.out.println("erreur"); else prix=a;} 
    public void afficher() 
    { System.out.println(id+" "+libelle+" "+marque+" "+prix+" ");} 

    @Override 
    public String toString() { 
     return "produit_alimentaire{" + "id=" + id + ", libelle=" + libelle + ", marque=" + marque + ", prix=" + prix + '}'; 
    } 


    public Date getDate_expiration() { 
     return date_expiration; 
    } 

    public void setDate_expiration(Date date_expiration) { 
     this.date_expiration = date_expiration;} 
     public void afficherplusdate() 
    { System.out.println(id+" "+libelle+" "+marque+" "+prix+" "+date_expiration);} 


} 

Мои Main.java только здесь, чтобы проверить каждый метод, моя проблема в исполнении есть

Exception in thread "main" java.lang.NullPointerException 
    at tn.tuniprob.gestionmagasin.Magasins.ajouterproduit(Magasins.java:70) 
    at tn.tuniprob.gestionmagasin.Main.main(Main.java:24) 

Когда я пытаюсь запустить его, вы можете дать мне решение, пожалуйста? спасибо заранее PS: Я действительно ненавижу Java, но это на моей школьной программе технологий все, что мусор

+6

http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and -how-do-i-fix-it –

+1

'new Produit [CAPACITE]' создать массив, но не заполняет его. – talex

+4

Не поймите меня неправильно, но: ваш исходный код не прост. Материал, который вы разместили здесь, - это ужасно запутанный MESS **. Ужасное форматирование, нарушение правил именования, нечистый код на многих уровнях. Неудивительно, что вы считаете, что нам нужна наша помощь для отладки простого NPE от такого «ввода». – GhostCat

ответ

1
private Produit[] tab = new Produit[CAPACITE]; 

Это создаст массив размером 50 инициализируется с null значениями, что-то вроде этого:

tab = {null, null, null, ...} 

так tab[0] и tab[1] все еще null.

Когда вы вызываете tab[0].getId(), это выбрасывает NullPointerException.

Вы должны инициализировать массив сначала с некоторыми значениями для того, чтобы использовать их, что-то вроде:

tab[0] = new Produit(); 
+0

Я пытаюсь объяснить ОП, почему его код плохо работает. Я не уверен, для чего даун-голос. –

+0

ah, конструктор, как и в базовом C, вот почему я его ненавижу, так много основных проблем (C++ и C# имеют почти одинаковый синтаксис, но проблем много не существует, и, честно говоря, я хочу узнать все , но я ненавижу J-вещи, потому что я использовал их не потому, что это предвзятость – bargo

+0

спасибо @ Eng.Fouad – bargo

Смежные вопросы