1

我是一名刚开始学习计算机科学的学生,我们被要求完成一个项目,该项目使随机生成的汽车对象移动到城市地图网格上随机生成的停车位。我为按钮、文本字段和文本区域开发了一个 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 循环做点什么,它就会继续永远和崩溃。我很茫然,任何帮助将不胜感激。谢谢。

4

2 回答 2

1

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

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

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

于 2013-05-10T11:59:26.927 回答
1

第一:不,你不一定需要一个while循环。您可以改用观察者模式(例如),一旦模拟完成,您的对象就会收到通知。至于你的问题:ifwhile 的内部显然是多余的(就像 the 一样== true)。真正的问题似乎是simulator.simulationFinished() 永远不会返回 true。您能否发布该函数的代码和代码(以及直接影响其返回值的任何代码)?

于 2013-05-10T11:56:48.260 回答