Java 将字符串数组从文件传递到对象数组
我会尽量保持简洁,只在需要时提供更多的代码。我在第26行得到一个空指针异常Java 将字符串数组从文件传递到对象数组,java,arrays,Java,Arrays,我会尽量保持简洁,只在需要时提供更多的代码。我在第26行得到一个空指针异常GMIstock[count].setName(值[0])。setName()方法只是设置一个字符串。最初我从另一个类传递了数组,但我认为这可能是我的问题的根源,并从这个类内部重新生成了数组。它传递到值[0到2]很好,但尝试将其从值[0]传递到产品[count]中的字符串会导致撕裂。我错过了什么 import java.io.File; import java.io.FileNotFoundException; impor
GMIstock[count].setName(值[0])代码>。setName()方法只是设置一个字符串。最初我从另一个类传递了数组,但我认为这可能是我的问题的根源,并从这个类内部重新生成了数组。它传递到值[0到2]
很好,但尝试将其从值[0]
传递到产品[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();
}
}}
您需要初始化GMIstock。如果您使用的是Java 8+,请在扫描仪初始化之前添加以下内容
int fileSize = Files.lines( Paths.get( fileName ) ).count();
GMIstock = new Product[ fileSize ];
编辑
在循环文件行时,还需要初始化产品。在调用循环中的产品设置程序之前,请添加以下内容
GMIstock[ count ] = new Product(); // I'm assuming this constructor is valid.
在您发布的代码中,GMIStock[count]从未被赋值,这将使其为空。