0

さて、私は 2 つのインターフェイスがあり、それらが両方とも 2 つの無関係なクラスで使用されるプロジェクトを作成する必要があります。compareTo メソッドを除いて、他のすべてを適切に機能させることができました。私が作成した 2 つのクラスは、Car と Horse です。私がやろうとしているのは、Horse の milesGoal を Car の MilesGoal と比較して、1、0、または -1 のいずれかを返すことです。

ただし、これを実行しようとすると、「double could not be dereferenced」というエラーが表示されます

コードのこの部分にアプローチするさまざまな方法を見つけようとして、しばらくこれに固執していました。メソッドを作成する代わりにテスタークラスで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;
    }
 }

Car クラスは Horse クラスとほぼ同じで、両方の 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);
}
4

2 に答える 2

1

まず、あなたは書いていattribute.objectます。これが失敗です。Other.milesGoalより良いオプションです。

もう1つの問題は、キャスティングにあります。あなたがしていることは、キャストしようとしています(キャストmilesGoal.otherHorseたいmilesGoal

使用する必要があります

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

また、適切な大文字化 (変数は小文字、クラス/インターフェイスは大文字) およびセッターとゲッターを使用してください。

さらに、メソッドを実装する他のクラスでメソッドを使用できるように、インターフェイスにキャストすることをお勧めします。

       if (milesGoal > ((MilesInterface) other).milesGoal)
于 2013-03-24T19:08:20.287 に答える
0

まず、(Horse)milesGoal.Otherする必要があります((Horse) Other).milesGoal

s と比較するための 1 つのメソッドと s とcompareTo比較するための 1 つのメソッドをオーバーロードすることをお勧めします。次に、コードは次のようになりますHorseCar

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;
}
于 2013-03-24T19:11:25.720 に答える