2012-09-20 144 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