我试图写一个关于员工和其他staaff支付的程序,我有一个名为Employee的抽象超类,然后下面的FullTimeEmployee,PartTimeEmployee,Orders和Salesman是Employee的子类。 我在Salesman中只有一个零指针问题,我试图计算每次销售所得的奖金。
这是我在Salesman类中的代码
public Salesman(String firstname, String lastname,int code, String address, String city,int tk,int phone,String email,int deptcode,int card,double hours,String cat,int orderno,double salary,Orders[] ord/*,double sales*/){
super( firstname, lastname, code, address, city, tk, phone, email, deptcode, card, hours, cat );
this.orderno=orderno;
setBaseSalary( salary );
//setGrossSales( sales );
Orders[] order= ord.clone();//new Orders[orderno];//create the array for the orders made by this salesman
//order=ord;
setSallary(order );
}
public void setSallary( Orders[] order ){
//double sum=0;
for(int i=0;i<=order.length;) {
grossSales+=order[i++].getamount(); //get the value of the sales done
System.out.println(grossSales);
}
if (grossSales<10000 ){
baseSalary+=baseSalary*0.05;
}
else if((grossSales>=10000)||(grossSales<=20000)){
baseSalary+=baseSalary*0.07;
}
else
baseSalary+=baseSalary*0.1;
}
在主要我有
Orders[] array=new Orders[20];
array[0]=new Orders(1,"14/5/2010","agora aftolinitwn",2000.0);
array[1]=new Orders(2,"14/5/2010","agora aftolinitwn",20000.0);
Salesman sales1 =new Salesman("giannis", "antoniou",35, "vavilonos 7", "leffkosia",11475,69486931,"gäntoniou@hotmail.com",100,40,160.0,"salesman",2,1300.0,array);
Salesman sales2 =new Salesman("andreas", "antoniou",35, "vavilonos 7", "lefkosia",11475,69486931,"äntonioua@hotmail.com",100,41,160.0,"salesman",1,1200.0,array);
基本上我所做的是创建一个带有salsmans信息的数组(从销售中获得的金额等),然后将其发送给Saleman Constructor。然后我将tha阵列的锥体复制到另一个阵列,试图计算奖金。但是我得到了
线程“main”中的异常java.lang.NullPointerException
at misthodosia.Salesman.setSallary(Salesman.java:36)
at misthodosia.Salesman.<init>(Salesman.java:28)
at misthodosia.Misthodosia.main(Misthodosia.java:30)
Java结果:1
继承了Orders类
public class Orders {
private int orderNo;
private String orderDate;
private String description;
private double orderAmount;
private Salesman man;
public Orders(int no,String date,String descrip,double amount/*,Salesman man*/){
orderNo=no;
orderDate=date;
description=descrip;
orderAmount=amount;
//this.man=man;
//Orders[] orders=new Orders[orderNo];//create the array for the orders made by this salesman
}
public double getamount(){
return orderAmount;
}
}
你帮我吗?我知道我对对象数组做错了但我无法弄明白:S答案 0 :(得分:2)
就在这条线上:
。grossSales + =顺序[I ++] getamount();
order数组的大小分配为20,但只有前2个被初始化,因此当它访问order [2] .getamount()时,该值为null,因此为空指针。
我强烈建议您使用ArrayList作为订单列表,而不必预先分配许多订单。
答案 1 :(得分:0)
for(int i=0;i<=order.length;)
应为for(int i=0;i<order.length;)
此外,grossSales + = order [i ++]。getamount();从那以后,订单会失败[2] element为null。您应该使用集合来保存订单(例如ArrayList) 或在访问成员之前检查null。
答案 2 :(得分:0)
此代码:
Orders[] array=new Orders[20];
array[0]=new Orders(1,"14/5/2010","agora aftolinitwn",2000.0);
array[1]=new Orders(2,"14/5/2010","agora aftolinitwn",20000.0);
创建一个长度为20的数组,并仅初始化前两个条目,这意味着 其他18个enrties包含空指针。
使用此数组时,您可以:
for(int i=0;i<=order.length;) {
grossSales+=order[i++].getamount(); //get the value of the sales done
这意味着索引2 order[i++]
将为null
,因此orders[i++].getAmount()
会在您取消引用NUllPointerException
值时生成null
。
答案 3 :(得分:0)
一般来说,为了找到像这样的空指针,我想做的是转到Exception堆栈跟踪指出的行(Salesman.java:36),检查你在该行上引用的对象,以及在该行之前为每个对象添加System.out.println()。其中一个必然会变成“空”。 然后从那里回溯,在这种情况下,你会发现(经过一些推理)杰克考克斯的答案。