2013-03-24 132 views
0

那么,我需要做一个项目,我有两个接口,它们都用于两个不相关的类。除了compareTo方法之外,我设法让其他所有方面都能正常工作。我所做的两个班是汽车和马。我想要做的就是比较从马匹到Car中的距离,然后返回1,0或-1。我遇到了问题compareTo

然而,当我尝试这样做,我得到的错误“双不能解除引用”

我一直停留在这对试图找到不同的方式接近这部分代码一段时间。我试着在测试程序类中使用compareTo而不是制作一个方法,但是我得到了相同的错误,我需要将它变成一个方法。

这是马类:

public class Horse implements milesInterface , kilometersInterface{ 
private double currentMile; 
private double currentKilo; 
private double milesGoal; 
private double kilosGoal; 
private String horseBreed; 

// CONSTRUCTORS 
public Horse(){ 
    currentMile = 0; 
    currentKilo = 0; 
    milesGoal = 0; 
    kilosGoal = 0; 
    horseBreed = "Unspecified"; 
} 
public Horse(double cm, double ck, double mg, double kg, String hb){ 
    currentMile = cm; 
    currentKilo = ck; 
    milesGoal = mg; 
    kilosGoal = kg; 
    horseBreed = hb; 
} 

// MILE METHODS 
public double remainingMiles(){ // Finds the remaining miles 
    return milesGoal-currentMile; 
} 
public void halfMile(){ // Divides the desired goal halfway (Miles) 
    milesGoal = milesGoal/2; 
} 
public void setMileGoal(double newMile){ // Allows you to set a new goal 
    milesGoal = newMile; 
} 
public double getMileGoal(){ 
    return milesGoal; 
} 

// KILOMETER METHODS 
public double remainingKilos(){ // Finds the remaining Kilos 
return kilosGoal-currentKilo; 
} 
public void halfKilo(){ // Divides the desire goal halfway (Kilos) 
    kilosGoal = kilosGoal/2; 
} 
public void setKiloGoal(){ // Allows you to set a new goal 
    kilosGoal = milesGoal*1.6; 
} 
public void setCurrentKilo(){ // Allows you to set the current Kilo 
    currentKilo = currentMile * 1.6; 
} 

// UNIQUE METHODS 
public double getMilesStatus(){ 
    return currentMile; 
} 
public double getKilosStatus(){ 
    return currentKilo; 
} 
public String getHorseBreed(){ 
    return horseBreed; 
} 
public void convertToKilos(){ // Converts current miles to kilometers 
    double kilos = currentMile * 1.6; 
    System.out.println("The current miles to kilometers is: " + kilos + "km."); 
} 
public void convertToMiles(){ // Converts current kilometers to miles 
    double miles = currentKilo * .6; 
    System.out.println("The current kilometers to miles is: " + miles + "m."); 
} 
public void milesPerHour(double hours){ // Calculates the mph to the goal by a time 
double answer = milesGoal/hours; 
System.out.println("The mph needed to reach the desination in " + hours + " hours: " + answer); 
} 
public void kilosPerHour(double hours){ // Calculates the kmph to the goal by a time 
double answer = kilosGoal/hours; 
System.out.println("The kilometers needed to reach the desination in " + hours + " hours: " + answer); 
} 
public int compareTo(Object Other){ 

    if(milesGoal > (Horse)milesGoal.Other) 
     return 1; 
    if(milesGoal < (Horse)milesGoal.Other) 
     return 0; 
     return -1; 
    } 
} 

汽车类是几乎一样的马之一,我需要找到一个方法来比较两者的milesGoal的,看看哪一个更大。我试过许多东西,但它似乎没有工作

这就是我所做的接口:

abstract interface milesInterface{ 
public double remainingMiles(); 
public void halfMile(); 
public void setMileGoal(double newMile); 
public int compareTo(Object Other); 
} 
abstract interface kilometersInterface{ 
public double remainingKilos(); 
public void halfKilo(); 
public void setCurrentKilo(); 
public int compareTo(Object Other); 
} 

回答

1

首先,你书面方式attribute.object。这是失败的。 Other.milesGoal是一个更好的选择。

另一个问题是铸造。你在做什么是试图投milesGoal.otherHorse(要投射milesGoal

您应该使用

 if (milesGoal > ((Horse) other).milesGoal) 

此外,使用适当的资本化(变量以大写字母小写,clases /接口去)和制定者和获得者。

此外,你可能会想投的界面,您可以使用与其他clases实现它

 if (milesGoal > ((MilesInterface) other).milesGoal) 
+0

谢谢,我没有得到任何编译错误了,我现在要尝试完成一切。再一次,非常感谢:D – Johngianni 2013-03-24 19:10:49

+0

另一件大事。除非你有充足的理由这么做,否则不要在你的接口中定义'compareTo',让你的类实现'java.util.Comparable'。 – SJuan76 2013-03-24 19:17:39

0

首先,(Horse)milesGoal.Other((Horse) Other).milesGoal方法。

我建议超载compareTo与一种方法比较Horse s和一种方法来比较Car s。然后你的代码看起来像

public int compareTo(Horse horse){ 
    if(milesGoal > horse.milesGoal) 
     return 1; 
    if(milesGoal < horse.milesGoal) 
     return -1; 
    return 0; 
} 

public int compareTo(Car car){ 
    if(milesGoal > car.milesGoal) 
     return 1; 
    if(milesGoal < car.milesGoal) 
     return -1; 
    return 0; 
}