你好,我目前得到的常见错误是 " 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 :(得分: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 :(得分: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
,如果它不是<
而不是>
,那么它是==
并且计数已经是equals
到0
public static int side1;
=&gt; public int side1;
如果它们是静态的,则对于 EACH Domino 添加Comparable接口是一个好习惯,允许在列表中对Dominos进行排序,方法compareTo()
将自动使用
public class Domino implements Comparable<Domino>{...}