java中的异常:声明了变量,但编译器无法读取它

java中的异常:声明了变量,但编译器无法读取它,java,Java,我有一个java程序,它有编译错误。我创建了两个类“magasin”和“produit”,类“magasin”包含一个“produit”列表 当我们创建一个“produit”时,可以抛出一个异常“ProdException” 当我们在“magasin”类的列表中添加“produit”时:可以抛出异常“prixException” 以下是“magasin”课程: /* * To change this license header, choose License Headers in Pro

我有一个java程序,它有编译错误。我创建了两个类“magasin”和“produit”,类“magasin”包含一个“produit”列表

  • 当我们创建一个“produit”时,可以抛出一个异常“ProdException”
  • 当我们在“magasin”类的列表中添加“produit”时:可以抛出异常“prixException”
以下是“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);
    }

}
/*
*要更改此许可证标题,请在“项目属性”中选择“许可证标题”。
*要更改此模板文件,请选择工具|模板
*然后在编辑器中打开模板。
*/
包装管理杂志;
进口管理杂志产品;
导入静态java.lang.System.in;
导入java.util.Vector;
/**
*
*@author用户
*/
公共级Magasin{
私有int-id;
私人字符串地址;
私人最终int capProd=2;
私有向量prod=新向量();
私人国际nbProd;
私人最终int capEmp=20;
私有向量emp=新向量();
公共Magasin(){}
公共Magasin(整数a,字符串b)
{
id=a;
adresse=b;
nbProd=0;
}
public int getId(){return id;}
公共字符串getAddresse(){return adrese;}
public int getCapProd(){return capProd;}
public void setId(int a){id=a;}
public void setadrese(字符串a){adrese=a;}
@凌驾
公共字符串toString()
{
返回“\n id”+id+“adrese:”+adrese+“capProd”+capProd+“nbPrd=“+nbProd;
}
公共无效附加条款()
{
System.out.println(this.toString());
System.out.println(“------------Produits”);
用于(产品p:prod)
{
System.out.println(p.toString());
}
System.out.println(“------------雇员”);
对于(雇员p:emp)
{
System.out.println(p.toString());
}
}
公共布尔寄存器(Produit p)
{
返回产品包含(p);
}
公共布尔Cheremp(雇员)
{
返回emp.contains(e);
}
公共布尔ajouterEmp(雇员)
{
如果(!cheremp(e))
{行政长官增补(e);
返回true;}
返回false;}
公共布尔值ajouterProd(Produit p)抛出异常prod
{if(nbProd>=capProd)
抛出新的ExceptionProd();
如果(!this.rechercher(p))
{
产品添加(p);
nbProd++;
返回true;
}
返回false;
}
公共无效供给棒(产品p)
{
产品移除(p);
}
公共无效供应员(雇员p)
{
emp.remove(p);
}
}
以下是“produit”类:

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;
    }  
}
package-GestionMag;
导入java.util.Date;
导入GestionMag.PrixException;
/**
*
*@author用户
*/
公共类产品{
私有int-id;
私串诽谤;
私人字符串品牌;
私人双大奖赛;
私人日期日期;
公共产品{};
公共产品(整数a、字符串b、字符串c、日期d)
{   
id=a;
诽谤=b;
品牌=c;
dateExp=d;
}
公共Produit(int a、字符串b、字符串c、双精度e、日期d)抛出PrixException
{

如果(prix简而言之,您正在尝试这样做:

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");
}
可能的解决办法2: 在单个
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");
}
试试看{
产品p2=新产品(2222,“lait”、“delice”、-22,d);
m、 ajouterProd(p2);
}捕获(PrixException e){
系统输出打印项次(“错误优先级<0”);
}捕获(例外产品e){
System.out.println(“erreuur”);
}

Hi,欢迎使用Stack Overflow。您需要将源代码减少到演示问题的最低限度。提示:当编译器拒绝编译您的类时,尝试运行该类是没有意义的。谢谢Mark,我理解这个问题,它现在可以工作了。
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 {
    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");
}