2017-09-28 97 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

相关问题