![](/img/trans.png)
[英]I'm writing a calendar program in java, but besides oct 2015 the months dont match, i need help please
[英]I need help with a program ia m writing in JAVA ( nullpointer exception)
我想寫一個關於員工和其他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
它就在這條線上:
grossSales + =順序[I ++] getamount();
order數組的大小為20,但是只有前2個被初始化,因此,當它訪問order [2] .getamount()時,該值為null,因此為null指針。
我強烈建議對訂單列表使用ArrayList,而不必預先分配許多訂單。
for(int i=0;i<=order.length;)
應for(int i=0;i<order.length;)
此外,grossSales + = order [i ++]。getamount(); 由於該元素為null,因此對order [2]將失敗。 您應該使用集合來保存訂單(例如ArrayList)或在訪問成員之前檢查null。
這段代碼:
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
,因此當您取消引用該null
值時, orders[i++].getAmount()
導致NUllPointerException
。
一般來說,為了找到像這樣的空指針,我想做的就是轉到Exception堆棧跟蹤指出的行(Salesman.java:36),檢查你在該行上引用的對象,然后在該行之前為每個對象添加一個System.out.println()。 其中之一勢必會變成“ null”。 然后從那里回溯,在這種情況下,您會發現(基於某種推理)上面的傑克·考克斯的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.