0

私はスタンフォード大学で CS106A コースを受講しており、課題の 1 つは、特定の都市間で利用可能なフライトのデータベースを構築することです。都市のクラスを作成しましたが、メソッドの呼び出しはaddDestination初めて機能し、2 番目の目的地が追加されると、ArrayList最終的に空になります。なんで?これは本当に私を手に入れました。

import java.util.*;
    //class for a city. destinations are stored in an ArrayList
public class City {

    //Constructor
public City(String name){
    CityName = name;
}

//returns the name of the city
public String getName(){
    return CityName;
}
    // takes in a destination and adds it to the ArrayList unless
    //the destination already exists in which case it returns false.
public boolean addDestination(String destination){
    if (destinations.indexOf(destination)==-1){
        destinations.add(destination);
        return true;
    }
    else return false;
}

public Iterator<String> destIter(){
    Iterator<String> it =destinations.iterator();
    return it;
}

private ArrayList<String> destinations = new ArrayList<String>();
private String CityName;
}

都市のデータベースを作成するコードは次のとおりです。hmであり、HashMap各行が "San Francisco -> New York" のような txt ファイルを読み取ります

BufferedReader rd = new BufferedReader(new FileReader(FileName));
     String line = "";
     while (line!=null){
        if (line.indexOf("->")!=-1){
            String From = line.substring(0, line.indexOf("->")-1);
            String To = line.substring(line.indexOf('>')+2);
            City city = new City(From);
            if (hm.containsKey(From)==false)hm.put(From, city);
            hm.get(From).addDestination(To);

        }   
        line = rd.readLine();
    }
4

3 に答える 3

0

インスタンス変数を一番上に置く以外に、あなたのコードは私のために働きます。

于 2012-06-14T20:57:57.853 に答える
0

あなたの都市の目的地リストが空である理由がわかりません。私はあなたの逐語的なコードをデバッグしましたが、うまくいきました。

からの宛先をチェックしていないことを再確認してcityください hm.get(From)。既に見つけた都市がある場合、再び参照することのない都市を作成していることになります。

より効率的なwhile-block は次のようになります。

while (line != null) {
    if (line.indexOf("->") != -1) {
        String From = line.substring(0, line.indexOf("->")-1);
        String To = line.substring(line.indexOf('>')+2);

        if (! hm.containsKey(From)) {
            hm.put(From, new City(From));
        }
        hm.get(From).addDestination(To);
    }
}
于 2012-06-14T21:01:53.683 に答える
0

都市には目的地がありますか? これはすべて、クラスcityではなくcityインスタンスのメンバーを作成したため、すべてが発生したと思います。つまりprivate ArrayList<String> destinations = new ArrayList<String>、各インスタンスには配列リストがありますが、すべての目的地をまとめるには配列リストが1つしか必要ありません。これは、作成した 2 番目の都市の arraylsit です

より具体的には、それが本当にそうであるかどうかを判断するための主要な方法を確認する必要があります.

于 2012-06-14T19:30:33.183 に答える