我的java程序执行困难

时间:2016-09-19 12:12:22

标签: java

我创建了一个简单的java程序来管理商业公司的商店 我使用的是netbeans 8.0.2,这里是Magasins.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);}


}

My 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,但它在我的学校计划中为那些垃圾的每个人提供技术支持

1 个答案:

答案 0 :(得分:1)

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

这将创建一个使用null值初始化的大小为50的数组,如下所示:

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

所以tab[0]tab[1]仍为null

当您调用tab[0].getId()时,会抛出NullPointerException

您需要先使用某些值初始化数组才能使用它们,例如:

tab[0] = new Produit();