5

我在将文件读入对象数组时遇到问题。我创建了一个 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());
           }    
      }
  }
4

3 回答 3

3

您的问题源于甚至没有在您的对象中设置变量,您所做的只是让它们生产和清洁,但没有填充它们的字段。

如果不知道您如何设置产品、产品和清洁类以及它们如何填充变量,我无法进一步回答。

于 2013-07-24T18:33:58.600 回答
0

当您在 while 循环中添加 Produce/Cleaning 对象时

if(fields[0].equals("produce"))
                pr[i]= new Produce();
           else 
                pr[i]=new Cleaning();

您只是将新的空白 Produce/Cleaning 对象添加到数组中。

要解决此问题,您需要在生产/清洁对象类中包含一些 getter 和 setter,以便您可以设置要设置的任何变量的值(生产/清洁项目名称的字符串?双打价格?#in-stock 的整数?)。

一旦你有了它,你可以给你的 Produce/Cleaning 对象值,当你尝试再次拉起它们时,这些值将意味着什么,即

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 中的内容以及您尝试使用在此处输入代码创建的内容,以便为您提供更多帮助,但希望这是一个开始。

于 2013-07-16T18:22:44.083 回答
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]));
于 2013-07-16T17:30:10.617 回答