Java 无法从静态上下文引用非静态方法
您好,我现在得到的常见错误是 “Domino.java:32:错误:无法从静态上下文引用非静态方法getValue()” 我理解这是一个问题,因为它只是getValue方法的一个实例。在这个compareTo方法中,我试图传入一些domino,并将其与集合domino进行比较,然后根据一些比较返回-1,0,1。我需要domino两侧的总和来比较它们,这就是为什么我试图获取domino.getValue(),此时我不确定如何实现它。如有任何建议或帮助,将不胜感激Java 无法从静态上下文引用非静态方法,java,error-handling,Java,Error Handling,您好,我现在得到的常见错误是 “Domino.java:32:错误:无法从静态上下文引用非静态方法getValue()” 我理解这是一个问题,因为它只是getValue方法的一个实例。在这个compareTo方法中,我试图传入一些domino,并将其与集合domino进行比较,然后根据一些比较返回-1,0,1。我需要domino两侧的总和来比较它们,这就是为什么我试图获取domino.getValue(),此时我不确定如何实现它。如有任何建议或帮助,将不胜感激 public class Domi
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[]) {
}
}
公共类Domino{
公共静态int side1;
公共静态int side2;
公共Domino(int-aside,int-bside){
侧1=侧边;
侧2=b侧;
}
公共多米诺骨牌(){
侧1=4;
侧2=5;
}
公共布尔isDouble(){
if(side1==side2){
返回true;
}
否则{
返回false;
}
}
public int getValue(){
返回侧1+2;
}
公共整数比较(Domino someDomino)
{
整数计数=0;
if(Domino.getValue()someDomino.getValue()){
计数=1;
}
if(Domino.getValue()==someDomino.getValue()){
计数=-0;
}
返回计数;
}
公共静态void main(字符串参数[]){
}
}
这是因为您在compareTo方法中静态地调用Domino类上的方法。摆脱Domino。
对getValue()的部分调用
public int compareTo(Domino-someDomino)
{
整数计数=0;
if(getValue()someDomino.getValue()){
计数=1;
}
如果(getValue()==someDomino.getValue()){
计数=-0;
}
返回计数;
}
这是因为您在compareTo方法中静态地调用Domino类上的方法。摆脱Domino。
对getValue()的部分调用
public int compareTo(Domino-someDomino)
{
整数计数=0;
if(getValue()someDomino.getValue()){
计数=1;
}
如果(getValue()==someDomino.getValue()){
计数=-0;
}
返回计数;
}
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;
}
此外:
- 如果,请使用
else,因为您的测试不能同时为真
- 无需在末尾检查
,如果它不是相等性
且不是code>,则它是
,计数将已经=
到相等
0
- 重要
公共静态内部1代码>=>
公共内部侧1代码>如果它们是静态的,那么它们对于每个Domino都是相同的
添加可比较的界面是一个很好的做法,为了允许对列表中的多米诺骨牌进行排序,将自动使用方法
compareTo()
public class Domino implements Comparable<Domino>{...}
公共类Domino实现了{…}
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;
}
此外:
- 如果,请使用
else,因为您的测试不能同时为真
- 无需在末尾检查
,如果它不是相等性
且不是code>,则它是
,计数将已经=
到相等
0
- 重要
公共静态内部1代码>=>
公共内部侧1代码>如果它们是静态的,那么它们对于每个Domino都是相同的
添加可比较的界面是一个很好的做法,为了允许对列表中的多米诺骨牌进行排序,将自动使用方法
compareTo()
public class Domino implements Comparable<Domino>{...}
公共类Domino实现了{…}
除了您要问的有关compareTo(…)方法的问题外,这将失败,因为您将每边的值存储为静态变量,而不是实例变量。当您创建第二个Domino时,它将覆盖第一个Domino存储的值-它们都将具有相同的值。除了您询问的有关compareTo(…)方法的问题之外,这将失败,因为您将每一方的值存储为静态变量,而不是实例变量。当您创建第二个Domino时,它将覆盖第一个Domino存储的值-它们都具有相同的值。在编写类时,这将始终返回0,因为Domino实例将值存储为类变量。若side1和side2是非静态的,那个就可以了。@JonathanS,在你们评论之前我刚刚编辑过;)在编写类时,它将始终返回0,因为Domino实例将值存储为类变量。若side1和side2是非静态的,那个就可以了。@JonathanS,在你们评论之前我刚刚编辑过;)