2017-09-28 130 views
0

你好我目前正在得到 的常見錯誤「Domino.java:32:錯誤:非靜態方法getValue()不能從靜態上下文中引用」 我有種理解,這是一個問題,因爲它只是getValue方法的一個實例。在這個compareTo方法中,我試圖傳入一些多米諾骨牌,並將其與集多米諾骨牌相比較,並根據一些比較返回-1,0,1。我需要多米諾骨牌兩邊的總和來比較它們,這就是爲什麼我想要獲得domino.getValue(),在這一點上,我只是不知道如何實現這一點。任何建議或幫助將不勝感激非靜態方法不能從靜態上下文中引用

public class Domino { 
    public static int side1; 
    public static int side2; 

     public Domino(int aside, int bside){ 
      side1 = aside; 
      side2 = bside ; 
     } 
     public Domino() { 
      side1 = 4; 
      side2 = 5; 
     } 

     public boolean isDouble(){ 
      if(side1 == side2) { 
       return true; 
      } 
      else { 
       return false; 
      } 
     } 
     public int getValue(){ 
      return side1 + side2; 
     } 
     public int compareTo(Domino someDomino) 
     { 
      int count = 0; 
      if(Domino.getValue() < someDomino.getValue()){ 
       count = -1; 
      }if(Domino.getValue() > someDomino.getValue()){ 
        count = 1; 
       } 
      if(Domino.getValue() == someDomino.getValue()){ 
        count = -0; 
       } 
      return count; 
     } 

     public static void main(String args[]) { 

     } 

} 
+0

除的方法,從這個問題你問關於compareTo(...)方法,這將失敗,因爲您將每邊的值存儲爲靜態變量而不是實例變量。當您創建第二個Domino時,它將覆蓋第一個存儲的值 - 它們將具有相同的值。 – JonathanS

回答

1

這是因爲你是在你的compareTo方法的Domino類靜態調用方法。擺脫調用getValue()的Domino.部分。

public int compareTo(Domino someDomino) 
     { 
      int count = 0; 
      if(getValue() < someDomino.getValue()){ 
       count = -1; 
      }if(getValue() > someDomino.getValue()){ 
        count = 1; 
       } 
      if(getValue() == someDomino.getValue()){ 
        count = -0; 
       } 
      return count; 
     } 
1

Domino是類本身,則需要比較的參數與當前實例的對象(明確的參數)(隱含參數)上,您所呼叫的方法之一,它的this

public int compareTo(Domino someDomino){ 
    int count = 0; 
    if(this.getValue() < someDomino.getValue()){ 
     count = -1; 
    }else if(this.getValue() > someDomino.getValue()){ 
     count = 1; 
    } 
    return count; 
} 

這是相同的:

public int compareTo(Domino someDomino) { 
    return Integer.compare(this.getValue(), someDomino.getValue()); 
} 

另外:

  • 使用else if因爲你的測試不能同時真正
  • 沒有必要在年底檢查equality,如果不是<而不是>所以它的==和計數將已經equals0
  • 重要public static int side1; =>public int side1;如果它們是靜態的,他們將用於是相同EACH多米諾

這將一個很好的做法,以增加可比接口,允許在爲前一個列表多米諾的排序,compareTo()將自動使用

public class Domino implements Comparable<Domino>{...} 
+0

在編寫該類時,這將始終返回0,因爲Domino實例將這些值存儲爲類變量。如果side1和side2是非靜態的,應該沒問題。 – JonathanS

+0

@JonathanS在你評論之前,我已經編輯了一分鐘;) – azro

相關問題