Хранение данных в элементах массива объектов возвращает исключение NullPointerException

#java #arrays #nullpointerexception

#java #массивы #исключение nullpointerexception

Вопрос:

Код :

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

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

Ответ №1:

 Customer[] cst = new Customer[3];
  

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

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

Комментарии:

1. Продолжайте забывать, что java инициализирует массив нулевыми объектами =/. Хороший улов.

Ответ №2:

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

 Customer[] cst = new Customer[3];
  

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

 {null, null, null}
  

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

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

Ответ №3:

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

Комментарии:

1. Да .. это не увеличивает i, но увеличивает значение ID с шагом в i.