我会尽量保持简洁,只在需要时提供更多代码。我在第26行GMIstock[count].setName(values[0]);
得到一个空指针异常。 setName()方法只是设置一个字符串。最初我从另一个类传递了数组,但我认为这可能是我的问题的根源,并从这个类中重新制作了数组。它传入values[0 through 2]
就好了但是试图将它从values[0]
传递到Product[count]
中的字符串会导致眼泪。我在这里缺少什么?
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Global_Inventory_Management {
String fileName = "src/data.csv";
File file = new File(fileName);
private Product[] GMIstock;
public void readStock() {
try {
Scanner reader = new Scanner(file);
reader.next(); //ignore first line
int count = 0; // I would use a for loop but the file could have values for any number of Products
while(reader.hasNext()) {
String data = reader.next();
String[] values = data.split(",");
System.out.println(values[0]);
System.out.println(values[1]);
System.out.println(values[2]);
//runs fine till right here
GMIstock[count].setName(values[0]); //sets name of type String in Product
GMIstock[count].setQuantity(Integer.parseInt(values[1]));
GMIstock[count].setPrice(Double.parseDouble(values[2]));
count++;
System.out.println(GMIstock[count].getName());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}}
答案 0 :(得分:0)
您需要初始化GMIstock。如果您使用的是Java 8+,请在扫描程序初始化之前添加以下内容。
int fileSize = Files.lines( Paths.get( fileName ) ).count();
GMIstock = new Product[ fileSize ];
修改强>
您还需要在循环文件行时初始化产品。在循环中调用Product setter之前,请添加以下内容。
GMIstock[ count ] = new Product(); // I'm assuming this constructor is valid.