我正在参加斯坦福大学的CS106A课程,其中一项任务是建立某些城市之间的航班数据库。我为一个城市写了一个类但是第一次调用addDestination
方法时工作,当添加第二个目标时,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
,它会读取一个txt文件,其中每一行都是“San Francisco - &gt; New York”
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();
}
答案 0 :(得分:0)
城市包含目的地?我认为所有这一切都发生在因为行private ArrayList<String> destinations = new ArrayList<String>
,你为城市实例创建了一个成员,而不是类城市,所以这意味着每个实例都有一个arraylist,但你只需要一个arraylist将所有目的地放在一起,它是空的,因为它是你创建的第二个城市的arraylsit
更具体地说,我需要看到你的主要方法,以确定它是否真的如此。
答案 1 :(得分:0)
除了将实例变量放在最上面之外,你的代码对我有效。
答案 2 :(得分:0)
我不确定为什么您的城市目的地列表为空。我调试了你的逐字代码,它对我有用。
仔细检查以确保您没有从city
检查目的地,只检查hm.get(From)
。如果您有一个已经找到的城市,那么您正在创建一个您最不会再次引用的城市。
效率稍高的while
- 块可能如下所示:
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);
}
}