2011-04-24 46 views
1

代码:将数据存储到对象数组元素返回空指针异常

import java.io.*; 

class Customer 
{ 
    String name; 
    int ID; 
    int purchasequantity; 
    double purchaseprice; 


    Customer() 
    { 
     name = ""; 
     ID = 0; 
     purchasequantity = 0; 
     purchaseprice = 0.0; 
    } 


} 

class StoreSell 
{ 
    public static void main(String args[]) throws IOException 
    { 
     Customer[] cst = new Customer[3]; 

     InputStreamReader isr = new InputStreamReader(System.in); 
     BufferedReader br = new BufferedReader(isr); 

     double totalAmount = 0; 

     System.out.println("Size of Array " + cst.length); 

     for (int i=0;i<cst.length;i++) 
     { 
      System.out.println("Enter Customer Name : "); 
      cst[i].name = br.readLine(); 
      cst[i].ID = 100 + (i+1); 
      System.out.println("Customer ID Generated is : "+cst[i].ID); 
      System.out.println("Enter Purchase Price per Piece : "); 
      //String price = br.readLine(); 
      //System.out.println("Entered Price is " +price); 
      cst[i].purchaseprice = Double.parseDouble(br.readLine()); 
      System.out.println("Enter Purchase Quantity : "); 
      cst[i].purchasequantity = Integer.parseInt(br.readLine()); 
     } 

     System.out.println(" Customer ID " + "Customer Name " + "Price Per Piece " + "Quntity " + "Bill Amount "); 

     for(int i=0;i<cst.length;i++) 
     { 
      System.out.print(cst[i].ID + " " +cst[i].name+" "+ cst[i].purchaseprice + " " + cst[i].purchasequantity); 
      double tempAmount = StaticMethod.calculateStatic(cst[i].purchaseprice, cst[i].purchasequantity); 
      totalAmount = totalAmount + tempAmount; 
      System.out.println(" " + tempAmount); 
     } 

     System.out.println("Total Sell of the day : Amount : " + totalAmount); 
    } 

} 

输出:

Size of Array 3 
Enter Customer Name : 
Nirav 
Exception in thread "main" java.lang.NullPointerException 
    at StoreSell.main(StoreSell.java:38) 

说明:

  1. 的所述节目d不会抛出任何编译错误。
  2. 在运行程序时,如果在控制台上为Name输入数据,它可以从控制台获取数据,但无法存储到数组对象中。
  3. 我试图将从控制台检索到的数据存储到一个临时变量(不是数组元素)中,并且它存储正确。
  4. 因此,我可以断定只有当它试图将数据存储到数组对象时才会出现问题。
  5. 但是,数组已成功创建。我试图打印数组的长度。它给出了正确的长度.. 3.

请帮我对此,我试图谷歌很多,但无法找到任何相同的修复。

回答

4

初始化数组使用默认值填充数组中的所有位置,而对于对象数组,默认值为null。所以下面的代码:

Customer[] cst = new Customer[3]; 

创建以下数组:

{null, null, null} 

有初始化数组的多种方式,但如果你只肯定将要使用3元素数组只是去这一个:

Customer cst[] = {new Customer(), new Customer(), new Customer()}; 
+0

雅的工作..谢谢.. :) – 2011-04-24 11:21:49

8
Customer[] cst = new Customer[3]; 

这会创建数组,而不是单个元素,您需要自己创建这些元素,例如,在循环:

for (int i=0;i<cst.length;i++) 
{ 
    cst[i] = new Customer(); 
+0

是的..它的工作..谢谢... :) – 2011-04-24 11:22:12

+1

保持忘记,Java初始化数组与空对象= /。很好的接收。 – 2011-04-24 11:39:06

1

这是一个猜测* 叫我疯但这样做,CST [I] .ID = 100 +(I + 1);实际上增加我?

+0

是的..它不增加我,但它确实增加ID的值与增量在我。 – 2011-04-24 11:23:45