我在将文件读入对象数组时遇到问题。我创建了一个if语句,以便将数据行分成两个不同的子组,一个是生成的,另一个是清理的。但是当我运行程序时,创建的对象是空的。如何将文件连接到对象?我错过了一些至关重要的东西。
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class Inventory{
public static void main(String[] args){
int i=0;
Product[] pr=new Product[16];
File InventoryFile=new File("inventory.csv");
Scanner in=null;
try{
in=new Scanner(InventoryFile);
while(in.hasNext()){
String line=in.nextLine();
String[]fields=line.split(",");
if(fields[0].equals("produce"))
pr[i]= new Produce();
else
pr[i]=new Cleaning();
i++;
}
System.out.println(pr[6]);
}catch(FileNotFoundException e){
System.out.println("Arrgggg"+e.getMessage());
}
}
}
答案 0 :(得分:3)
你的问题源于甚至没有在你的对象中设置varibles,你所做的就是让它们生产和清洁但不填充它们的领域。
如果不知道如何设置您的产品,产品和清洁类以及如何填充变量,我无法进一步回答。
答案 1 :(得分:0)
你没有填充你的对象,你正在创建,但没有填充它们。你可以像这样创建一个构造函数:
public Product(String a, int b, int c, String, d, int e)
{
this.a = a;
this.b = b;
this.c = c;
this.d = d;
this.e = e;
}
在扩展类中,您只需调用超级构造函数。
public Produce(String a, int b, int c, String, d, int e)
{
super(a,b,c,d,e);
}
当你创建它们时,请致电:
new Produce(fields[0],Integer.parseInt(fields[1]),Integer.parseInt(fields[2]),fields[3],Integer.parseInt(fields[4]));
答案 2 :(得分:0)
当您在while循环中添加Produce / Cleaning对象时
if(fields[0].equals("produce"))
pr[i]= new Produce();
else
pr[i]=new Cleaning();
您只需在阵列中添加新的空白Produce / Cleaning对象。
要解决此问题,您需要在Produce / Cleaning对象类中包含一些getter和setter,以便您可以设置您要设置的任何变量的值(产品名称/清洁项目的字符串) ?价格翻倍?#in-stock?)。
一旦你有了这个,你可以给你的产品/清洁对象值,当你试图再次提起它们时,这意味着什么,即
if(fields[0].equals("produce"))
pr[i]= new Produce(fields[1], fields[2], fields[3]); //assuming you make a constructor that takes these values
else
pr[i]=new Cleaning(fields[1], fields[2], fields[3]);
.
.
.
if(pr[i] instanceOf Produce)
String vegName = pr[i].getName();
int stock = pr[i].getStock();
double price = pr[i].getPrice();
我需要更多地了解csv中的内容以及您尝试使用输入代码创建的内容,以便为您提供更多帮助,但希望这是一个开始。