Хранение данных в Object Array Elements возвращает исключение NullPointerException - PullRequest
1 голос
/ 24 апреля 2011

код:

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. Указанная программа не выдает никакой ошибки компиляции.
  2. Во время работы программы, когда данные вводятся на консоли для имени, она может извлечь данные из консоли, но не может сохранить их в объекте массива.
  3. Я попытался сохранить данные, извлеченные из консоли, во временную переменную (не элемент массива), и она хранится правильно.
  4. Следовательно, я могу сделать вывод, что проблема возникает только тогда, когда он пытается сохранить данные в объект массива.
  5. Однако массив успешно создан. Я попытался напечатать длину массива. и это дает правильную длину .. 3.

Пожалуйста, помогите мне в этом, я пытался гуглить много на нем, но не смог найти ни одного исправления для того же.

Ответы [ 3 ]

8 голосов
/ 24 апреля 2011
Customer[] cst = new Customer[3];

Это создает массив, а не отдельные элементы, вам нужно создать их самостоятельно, например, в цикле:

for (int i=0;i<cst.length;i++)
{
    cst[i] = new Customer();
4 голосов
/ 24 апреля 2011

Инициализация массива заполняет все позиции в массиве значением по умолчанию, а для массива объектов значение по умолчанию равно нулю.Поэтому следующий код:

Customer[] cst = new Customer[3];

создает следующий массив:

{null, null, null}

Существует множество способов инициализации массивов, но если вы определенно собираетесь использовать только 3 элементамассив просто пойти на это:

Customer cst[] = {new Customer(), new Customer(), new Customer()};
1 голос
/ 24 апреля 2011

Это предположение * Называй меня сумасшедшим, но делаю это, cst [i] .ID = 100 + (i + 1);на самом деле увеличить я?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...