2013-03-24 297 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; 
}