-2

私は3つのクラスを持っています。私はインターフェースについて学んでおり、インターフェースクラスTravelCostは、3つのクラスすべてで一貫性を保つために、パブリック抽象とメソッドのタイプと名前を持っている必要があります。3つのクラス(AirTravelCost、TrainTravelCost、CarTravelCost)はTravelCostを実装します。私はそれらすべてを設定し、動作するようにテストしました。ただし、私が想定しているテストページでは、arrayListを使用して、最小のコストと最短の期間で検索を入力します。ArrayListでこれを行ったことがないため、これを行う方法がわかりません。テストクラスのサンプルコードは次のとおりです。

import java.util.*;

 public class TestTravelCost
 {
   public static void main(String [] args)
   {
    /*Scanner scn = new Scanner(System.in); //scanner object

    System.out.println("Number of Miles: ");
    double numOfMiles = scn.nextDouble();

    System.out.println("Hotel cost per night: ");
    double cost = scn.nextDouble();

    System.out.println("Description: ");
    String description = scn.nextLine();*/

    TravelCost c = new CarTravelCost(400, 200, "Boston");//instantiate object for car travel
    TravelCost t = new TrainTravelCost(6, 60.0, "Boston"); //instantiate object for train travel
    TravelCost a = new AirTravelCost(224, "20110103", "0743" , "20110103", "1153", "Boston");//instantiate object for air travel

    ArrayList<TravelCost> AL = new ArrayList<TravelCost>();//array list for car travel
    AL.add(c);
    AL.add(t);
    AL.add(a);

    for(TravelCost tc : AL)
    {
        System.out.println(tc.toString());
    }
   }
}

出力:ボストンへの車の旅は7.2727272727272725時間と費用210.0
ボストンへの電車の旅は6.0時間と費用70.0
ボストンへの飛行機の旅は1.0166666666666666と費用243.48888888888888 //これは正しい計算ではありません、私はどこにいるのかわかりません間違っていますが、最短の時間と同じだと思います。数学が苦手だと思います。

これが私が空の旅に使用した計算方法です

    public double getDuration()
{
    //---DEPARTURE---//
    int Dyear = Integer.parseInt(departureDate.substring(0,3)); //2011
    int Dmonth = Integer.parseInt(departureDate.substring(4,5));//01
    int Dday = Integer.parseInt(departureDate.substring(6,7));//03

    int Dhour = Integer.parseInt(departureTime.substring(0,1));//0743
    int Dminute = Integer.parseInt(departureTime.substring(2,3));//1153
    //---ARRIVAL---//
    int Ayear = Integer.parseInt(arrivalDate.substring(0,3)); //2011
    int Amonth = Integer.parseInt(arrivalDate.substring(4,5));//01
    int Aday = Integer.parseInt(arrivalDate.substring(6,7));//03

    int Ahour = Integer.parseInt(arrivalTime.substring(0,1));//0743
    int Aminute = Integer.parseInt(arrivalTime.substring(2,3));//1153

    GregorianCalendar date = new GregorianCalendar(Dyear, Dmonth, Dday, Dhour, Dminute);//departure date & time
    GregorianCalendar time = new GregorianCalendar(Ayear, Amonth, Aday, Ahour, Aminute);//arrival date & time

    //date = arrivalDate - departureDate;//2011-01-03 - 2011-01-03 = 0
    //time = arrivalTime - departureTime;//0734 - 1153 = 410

    double duration = (Math.abs(date.getTimeInMillis() - time.getTimeInMillis()) / 60000.0) / 60.0;
    return duration;
  `enter code here` }

コードでこの結果を取得するにはどうすればよいですか?

最低費用:ボストンへの電車の旅は11.0時間かかり、費用は70.0です。最短の時間
:ボストンへの飛行機の旅は4.166666666666667時間かかります234.0

4

1 に答える 1

0

インターフェースを表示していませんTravelCostが、必要なものを実現するには、少なくともgetDurationメソッドとgetCostメソッドが必要です。

public interface TravelCost {
    ... // what you already have in the interface definition
    public double getDuration();
    public double getCost();
}

それで武装して、これらのプロパティで比較できるように基本を実装する小さなダミークラスを作成します。

public DummyTC implements TravelCost {
    private double cost;
    private double duration;

    public DummyTC(double cost, double duration) {
        this.cost = cost;
        this.duration = duration;
    }

    public double getDuration() {
        return duration;
    }

    public double getCost() {
        return cost;
    }

    // and other methods/properties imposed by TravelCost
}

これにより、探しているものを見つけることができます。

// instantiate 2 DummyTC's with impossibly high cost &durations

TravelCost cheapest = new DummyTC(99999999999.99, 99999999999.99);
TravelCost shortest = new DummyTC(99999999999.99, 99999999999.99);

// iterate over the List

for(TravelCost tc : AL) {
    // if present tc is cheaper than cheapest, swap
    if ( tc.getCost() < cheapest.getCost() ) {
        cheapest = tc;
    }
    // if present tc is shorter than shortest, swap
    if ( tc.getDuration() < shortest.getDuration() ) {
        shortest = tc;
    }
}

// at this point cheapest and shortest will contain the cheapest and shortest 
// ways of transportation, so we print them out.

System.out.println(cheapest.toString());
System.out.println(shortest.toString());

もう1つ、日付処理コードはひどく複雑です。SimpleDateFormatをご覧ください

Date date = null;
Date time = null;
// create a SimpleDateFormat instance for your time/date format
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
try {
    // parse it
    date = format.parse(departureDate);
    // done
} catch (ParseException e) {
    // departureDate could not be parsed, you should handle that case here
}

try {
    // parse it
    time = format.parse(arrivalTime);
    // done
} catch (ParseException e) {
    // arrivalTime could not be parsed, you should handle that case here
}

Dateにはエポックミリスを取得するルーチンもあるので、すでに持っているコードを続行できますがlong、この場合、aはおそらくdoubleよりも優れたreturn-typeです。

于 2013-03-19T23:27:22.687 に答える