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条)

报告相同问题?

悬赏问题

  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备