2012-11-03 105 views
0

我一直在獲取有關靜態上下文中使用的非靜態方法的這段代碼的兩個錯誤。此代碼使用鳥類,貓和狗的不同對象的ArrayList,並使用名爲Pet的接口將它們放入名爲petList的ArrayList中。
我在第四和第六行得到相同的錯誤。靜態上下文中使用的非靜態方法錯誤

public static void Feed(ArrayList petList){ 
     Scanner input = new Scanner(System.in); 
     String petName = input.next(); 
     contains(petName, petList); 

     if(ifThere == true){ 
      String feed = Pet.feed(); 
      System.out.println(petName + feed); 
     } 
     else{ 
      System.out.println("Unknown pet"); 
     } 
    } 


    public boolean contains (String petName, ArrayList petList){ 

    boolean ifThere = false; 
    int sizeList = petList.size() -1; 
    for(int i=0; sizeList > i; i++){ 
     Pet booleanPet = petList.get(i); 
     String booleanName = booleanPet.getName(); 
     if (booleanName.equals(petName)){ 
     ifThere = true; 
     } 
} 
return ifThere; 

}

+0

這將暗示contains和feed不是靜態方法。沒有更多的代碼,沒有辦法可以幫到更多的忙。 –

回答

0

簡而言之:您不能調用從靜態方法非靜態方法。

解決方案: 1)使您的「包含」方法爲靜態,它將解決問題。

OR 2)(假設類的名稱爲PET然後創建寵物類和呼叫的一個實例包含方法: 您的4號線可通過下面的代碼(C#風格的代碼來代替):

Pet somePet = new Pet(); 
somePet.contains(petName, petList); 

- 附加信息: 靜態方法是一種永遠不會特定於任何對象的方法,例如添加2個數字,您不需要實例化任何類來調用Math.Add()方法,因爲Add是靜態方法

你也可以說Static是一種方法h不是虛擬的意思,你一定知道 哪個方法被調用。

相關問題