ethan777 2011-08-04 21:05
浏览 206
已采纳

StackOverflowError异常,哪位好心人看看啊

   打算用面向对象思想,写个求最小生成树问题。写了一半,就出现问题了import java.util.HashMap;

public class City {
    private String cityName; 

    private HashMap<City, Double> adjCities = new HashMap<City, Double>(); 

    public City(String cityName) {
        this.cityName = cityName;

    }

    public void addAjdCity(City city, double cost) {
        adjCities.put(city, cost);
        // System.out.println("test1");
        city.adjCities.put(this, cost);
        // System.out.println("test2");

    }

    public void removeAjdCity(City city) {

    }

    public void removeAjdCity(String cityName) {

    }

    public String toString() {
        return cityName + ":" + "\n" + adjCities;
    }

    public static void main(String[] args) {
        City c1 = new City("上海");
        City c2 = new City("杭州");

        c1.addAjdCity(c2, 100);
        // 怎么输出c1 c2时会出问题?StackOverflowError异常。如果把最后两句println注释掉,就不会报错??
        System.out.println(c1);
        System.out.println(c2);

    }

}
  • 写回答

4条回答 默认 最新

  • redstarofsleep 2011-08-04 21:35
    关注

    你的toString方法里递归调用了,死循环出不来了...
    这是AbstractMap的toString方法:
    [code="java"]
    public String toString() {
    Iterator> i = entrySet().iterator();
    if (! i.hasNext())
    return "{}";

    StringBuilder sb = new StringBuilder();
    sb.append('{');
    for (;;) {
        Entry<K,V> e = i.next();
        K key = e.getKey();
        V value = e.getValue();
        sb.append(key   == this ? "(this Map)" : key);
        sb.append('=');
        sb.append(value == this ? "(this Map)" : value);
        if (! i.hasNext())
        return sb.append('}').toString();
        sb.append(", ");
    }
    }
    

    [/code]
    由于你的Map里Key还是City对象,所以执行Map的toString时这一行 sb.append(key == this ? "(this Map)" : key);会自动调用key的toString方法,这样又进入了City的toString方法,然后就挂了.....

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿