我有一个Java程序,该程序有编译错误。我创建了两个类“ magasin”和“ produit”,“ magasin”类包含“ produit”列表
这是“ magasin”类:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package GestionMag;
import GestionMag.Produit;
import static java.lang.System.in;
import java.util.Vector;
/**
*
* @author USER
*/
public class Magasin {
private int id;
private String adresse;
private final int capProd=2;
private Vector<Produit> prod = new Vector<Produit>();
private int nbProd;
private final int capEmp=20;
private Vector<Employe> emp = new Vector<Employe>();
public Magasin(){}
public Magasin(int a,String b)
{
id=a;
adresse=b;
nbProd=0;
}
public int getId(){return id;}
public String getAdresse(){return adresse;}
public int getCapProd(){return capProd;}
public void setId(int a){id=a;}
public void setAdresse(String a){adresse=a;}
@Override
public String toString()
{
return "\n id"+id+" adresse:"+adresse+" capProd"+capProd+"nbPrd="+nbProd;
}
public void afficher()
{
System.out.println(this.toString());
System.out.println("----------Produits");
for(Produit p : prod)
{
System.out.println(p.toString());
}
System.out.println("----------Employes");
for(Employe p : emp)
{
System.out.println(p.toString());
}
}
public boolean rechercher(Produit p)
{
return prod.contains(p);
}
public boolean chercherEmp(Employe e)
{
return emp.contains(e);
}
public boolean ajouterEmp(Employe e)
{
if(!chercherEmp(e))
{emp.add(e);
return true;}
return false; }
public boolean ajouterProd(Produit p) throws ExceptionProd
{ if (nbProd>=capProd)
throw new ExceptionProd();
if(!this.rechercher(p))
{
prod.add(p);
nbProd++;
return true;
}
return false;
}
public void supprimerProd(Produit p)
{
prod.remove(p);
}
public void supprimerEmp(Employe p)
{
emp.remove(p);
}
}
这是“产品”类:
package GestionMag;
import java.util.Date;
import GestionMag.PrixException;
/**
*
* @author USER
*/
public class Produit {
private int id;
private String libelle;
private String marque;
private double prix;
private Date dateExp;
public Produit(){};
public Produit(int a,String b,String c,Date d)
{
id=a;
libelle=b;
marque=c;
dateExp=d;
}
public Produit(int a,String b,String c,double e,Date d) throws PrixException
{
if(prix<0)
throw new PrixException();
else{
id=a;
libelle=b;
marque=c;
prix=e;
dateExp=d;
}
}
@Override
public String toString()
{
return "id="+id+" libelle:"+libelle+" marque:"+marque+" prix"+prix+" DateExpiration"+dateExp;
}
public int getId(){return id;}
public String getLibelle(){return libelle;}
public String getMarquue(){return marque;}
public double getPrix(){return prix;}
public Date getDateExp(){return dateExp;}
public void setId(int a){id=a;}
public void setLibelle(String a){libelle=a;}
public void setMarque(String a){marque=a;}
public void setPrix(double a)throws PrixException
{ if(prix<0)
throw new PrixException();
else
prix=a;
}
public void setDateExp(Date d){dateExp=d;}
@Override
public boolean equals(Object o)
{
if(o==null)
{return false;}
if(o.getClass()!=this.getClass())
return false;
if(o.getClass()==this.getClass())
{
Produit p=(Produit)o;
if(p.getId()==this.getId())
return true;
else
return false;
}
return false;
}
}
这是主要内容:
public class Prosit1 {
public static void main(String[] args) {
Date d=new Date(22-22-1010);
Produit p=new Produit(1021,"lait","delice",d);
Produit p1=new Produit(3333,"yaourt","delice",d);
try
{
Produit p2=new Produit(2222,"lait","delice",-22,d);
}
catch(PrixException e)
{
System.out.println("erreur prix < 0");
}
Magasin m=new Magasin(12,"Aziza al ghazella");
try
{ m.ajouterProd(p2);
}
catch(ExceptionProd e)
{
System.out.println("erreuuur");
}
生成错误时:找不到符号p2。 执行异常时显示:
java.lang.RuntimeException:无法编译的源代码-永远不会在相应的try语句的正文中抛出异常GestionMag.ExceptionProd 在prosit1.Prosit1.main(Prosit1.java:71)
答案 0 :(得分:5)
简而言之,您正在尝试这样做:
try {
Produit p2 = new Produit(2222, "lait", "delice", -22, d);
} catch (PrixException e) {
System.out.println("erreur prix < 0");
}
try {
m.ajouterProd(p2);
} catch (ExceptionProd e) {
System.out.println("erreuuur");
}
第二个try
块不知道p2
的定义,因为它是在另一个try
块中定义的。您可以通过以下方法解决它:
注意:这仅解决您的问题,而不是复制和粘贴解决方案。
在p2
任一块之外定义try
。
Produit p2 = null;
try {
p2 = new Produit(2222, "lait", "delice", -22, d);
} catch (PrixException e) {
System.out.println("erreur prix < 0");
}
try {
m.ajouterProd(p2);
} catch (ExceptionProd e) {
System.out.println("erreuuur");
}
在单个try
块中执行代码并立即捕获多个异常。
try {
Produit p2 = new Produit(2222, "lait", "delice", -22, d);
m.ajouterProd(p2);
} catch (PrixException e) {
System.out.println("erreur prix < 0");
} catch (ExceptionProd e) {
System.out.println("erreuuur");
}