2015-05-23 26 views
0
public void populatePrizeArraylist() 
{ 
    ArrayList <Prize> prizeArrayList = new ArrayList <Prize>(); 
    // The name of the file which we will read from 
    File filename = new File("prizes.txt"); 

    try 
    { 
     // Prepare to read from the file, using a Scanner object 
     FileReader inputFile = new FileReader(filename); 

     Scanner parser = new Scanner(inputFile); 
     // Read each line until end of file is reached 
     while (parser.hasNextLine()) 
     { 
      // Read an entire line, which contains all the details for 1 prize 
      String readFile = parser.nextLine(); 
      String delimiter = ","; 
      String[] fileList = readFile.trim().split(delimiter); 

      Prize newPrize = new Prize(); 

      newPrize.setPrizeName(fileList[0]); 
      newPrize.setPrizeWorth(Integer.parseInt(fileList[1])); 
      newPrize.setPrizeCost(Integer.parseInt(fileList[2])); 

      this.prizeArrayList.add(newPrize); 

     } 
    } 
} 

我在做什么错在这里?我创建了一个新的ArrayList,然后一个新的对象,并设置一些值,该对象的名称变量,但是当我试图将该对象添加到我的ArrayList中,我收到了零点异常错误来自不同类的对象ArrayList - 空指针错误

+1

你确定你得到一个运行时异常吗?你的代码,因为它是不会编译的,因为你试图调用'ArrayList'上的一个不存在的'setGoodName()'方法而不是'newItem' – kaykay

+0

hi @kaykay我已经把更多的代码,你是否能够弄清楚什么是错误的 – Tarinkot

+0

这段代码与你之前发布的代码段完全不同。请考虑让你的问题更清楚。想象一下,如果有人要求你调试一些代码,你期望从他们那里得到什么信息 – kaykay

回答

1

如果我看了你的代码的权利。 您正在填充void函数内的数组列表。 数组列表是在本地函数内部创建的。 如果你没有返回那个数组列表,那么在你的函数endas后删除了这个数组列表。

有意思的建议,使用构造函数是通过默认的构造函数创建一个类的坏习惯,然后通过方法将其属性设置为某个值。

+0

谢谢@Spidey在这里肯定会学到很多东西。那么你会推荐什么呢? – Tarinkot

+0

@Tarinkot使用自定义构造函数,他们将允许您为参数中的属性添加值。如果你不熟悉它们,我推荐一个关于java的好教程页面。 – Spidey

+0

@Tarinkot关于主要问题,我建议在需要使用它的地方返回数组列表。 – Spidey

1
goodsArrayList.setGoodName("Pants"); 
goodsArrayList.add(newItem); 

是错误的,因为你需要调用setGoodName()newItem 试试这个:

newItem.setGoodName("Pants"); 
goodsArrayList.add(newItem); 
+0

嗨jake,它编译好,但我得到一个空指针异常错误 – Tarinkot

2

这个变量声明是方法范围内

ArrayList <Prize> prizeArrayList = new ArrayList <Prize>(); 

和您尝试使用

this.prizeArrayList.add(newPrize); 

添加元素,因此我肯定有定义的类级变量“prizeArrayList”还未被初始化,您要添加到它并获得NPE。

你必须使用

prizeArrayList.add(newPrize); 
+0

我怎么能初始化它? – Tarinkot

+0

看着你的方法,你不想添加到类级变量。只需从将newPrize添加到prizeArrayList的行中删除“this”即可。 – AshutoshK

+0

没问题,但现在我不能从任何其他方法访问它,因为prizeArrayList不是一个类级别的变量,它只是在方法范围内创建它,然后消失? – Tarinkot