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