2012-09-20 146 views
1

我正在写一个程序,该程序创建一个对象,该对象持有来自用户的输入并将其存储在ArraySortedList中。其中一个要求是检查并查看特定对象是否已经在列表中。我遇到的麻烦是每当我输入一组secound信息时,我都会遇到一个错误。参考问题

//Global variables at the top 
    ListInterface <Golfer> golfers = new ArraySortedList <Golfer> (20); 
    Golfer golfer; 

    //Function Variables 
    Scanner add = new Scanner(System.in); 
    Golfer tempGolfer; 
    String name = "."; 
    int score; 

    while(!name.equals("")) //Continues until you hit enter 
    { 
     System.out.print("\nGolfer's name (press Enter to end): "); 
     name = add.next(); 
     System.out.print("Golfer's score (press Enter to end): "); 
     score = add.nextInt(); 
     tempGolfer = new Golfer(name,score); 

     if(this.golfers.contains(tempGolfer)) 
      System.out.println("The list already contains this golfer"); 
     else 
     { 
      this.golfers.add(this.golfer); 
      System.out.println("\nYou added \'Golfer(" + name + "," + score + ")\' to the list!"); 
     } 
    } 

错误消息:

Exception in thread "main" java.lang.NullPointerException 
at ArrayUnsortedList.find(ArrayUnsortedList.java:67) 
at ArrayUnsortedList.contains(ArrayUnsortedList.java:110) 
at GolfApp.addGolfer(GolfApp.java:90) 
at GolfApp.mainMenu(GolfApp.java:52) 
at GolfApp.main(GolfApp.java:24) 

我几乎可以肯定它的东西做的变量是如何引用,但我真的不知道我怎么能解决这个问题,我有很多的麻烦与变量引用。

+2

如果您想要一组有序的元素,我会使用SortedSet。 –

+0

是的,我宁愿使用不同的ADT,但我们不得不使用这个:P。我必须检查,但谢谢! – adc90

回答

3

您的高尔夫选手变量未初始化。 尝试:

this.golfers.add(tempGolfer); 

关于。

+0

正确的是,当您调用this.golfers.add(this.golfer)时,您将为列表添加null,因为this.golfer从不分配。现在通过代码第二次,NPE来自您在第一次迭代时添加到列表中的空引用。 –

+0

谢谢,我明白了我现在所做的。当我遇到问题时,我会得到隧道视野。我现在有一个新问题,这是一种相关的问题。当我试图找出列表中是否已经包含该元素的副本。例如,如果我尝试输入{Dave,12}和{Dave,12}两次,就不会发现我输入的信息与if(this.golfers.contains(new Golfer(name,score) ))”。我在想它是比较对象的地址以查看它们是否匹配,但无论如何要使用equals()函数(contains函数使用什么)来检查重复数据吗? – adc90

+0

嗨,你应该在Golfer类中实现equals方法。它将被调用来检查两个实例是否相等。 – richardtz