我创建了一个简单的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,但它在我的学校计划中为那些垃圾的每个人提供技术支持
答案 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();