【问题标题】:ParkingSimulation infinite while loop crisis停车模拟无限循环危机
【发布时间】:2013-05-05 02:17:42
【问题描述】:

我是一名刚开始学习计算机科学的学生,我们被要求完成一个项目,该项目使随机生成的汽车对象移动到城市地图网格上随机生成的停车位。我为按钮、文本字段和文本区域开发了一个 GUI。一切都按要求进行,除了在动画结束时,当所有汽车都到达停车位时,我需要在我的 JTextArea 中显示分析。我的按钮设置正确,我会告诉你下面的代码发生在哪里:

    else if (e.getSource() == start) {

    setAnimate(true);

    if(simulator.simulationFinished()) {
        createAnalytics();
    }

    }

所以在这里我在开始动画的按钮“开始”上实现了一个动作监听器。目前它:

  1. 目前它开始动画,所有汽车都按预期行驶到停车位。
  2. 它显示在动画开始之前派生的分析(分析包括:汽车 ID、移动次数、尝试的平均点数、平均行驶距离)
  3. 然后动画将结束。
  4. 如果我再次按下开始按钮,它将显示正确的分析。

我知道,为了让程序在程序完成时显示正确的分析,我很可能需要一个 while 循环,但是我无法想象任何不会创建无限循环并需要我的东西通过控制台手动终止程序。

    while(!simulator.simulationFinished()) {
    if(simulator.simulationFinished() == true)break; {
    createAnalytics();
    }
    }

我也在现有的所有循环的数百个其他变体中尝试过这个。按照我的逻辑,我需要 while 循环,以便它继续检查模拟是否完成,以便我可以执行生成分析的方法,但如果不给 while 循环做点什么,它就会继续永远和崩溃。我很茫然,任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: java loops simulator


    【解决方案1】:

    首先:不,您不一定需要 while 循环。您可以改用observer pattern(例如),一旦模拟完成,您的对象就会收到通知。至于您的问题:while 中的if 显然是多余的(== true 也是如此)。真正的问题似乎是 simulator.simulationFinished() 从不 返回 true。您能否发布该函数的代码和代码(以及任何直接影响其返回值的代码)?

    【讨论】:

      【解决方案2】:

      没有详细说明,您的while 循环存在严重问题。

      看,只要simulator.simulationFinished() 返回false,它就会循环。 但是,在循环中,您会检查相反的情况——这永远不会发生。

      我建议使用某种类型的侦听器,尽管要求不够明确,我无法提供任何进一步的建议。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        • 1970-01-01
        相关资源
        最近更新 更多