0

我目前被困在一个Java程序上。我的程序,一个城市建设游戏,需要能够根据用户的心血来潮随时实例化对象,并且对象的数量需要是无限的。

该程序将有一个 Building 类型的对象。

(我知道如何实例化新对象;就像这样......

Building building1 = new Building();

...)

但是,这种方法对于我的程序来说是不可接受的。我的程序需要能够即时实例化新的 Building 对象。想象一下,用户可以选择单击一个按钮,将一个新建筑物放置到世界中。他们可以点击 0 次将新建筑物放置到世界中,也可以点击 5,000 次,从而将 5,000 座建筑物放置到世界中。

我显然不想实例化 5,000 个对象,如下所示:

Building building1 = new Building();
Building building2 = new Building();
...
Building building5000 = new Building();

关于如何编码的任何建议?提前致谢!

4

1 回答 1

3

你需要知道两件事来做你似乎要求做的事情。

第一个是(在这种情况下)建筑对象的集合。您可以在 Java 中创建一个类似的行

ArrayList<Building> buildings = new ArrayList<Building>();

在您的代码中,如果您执行以下两行,您将创建一个建筑物并将其添加到列表中:

Building building = new Building();
buildings.add(building);

之后,即使building变量超出范围,建筑物仍将保留在您的列表中。您必须确保该buildings对象所引用的对象在您希望保留建筑物列表的时间段内不超出范围。

要意识到的第二件事是,您不必拥有 500 个不同的实例化语句来创建 500 个建筑物。如果用户点击一个按钮,就有可以执行的代码(取决于你有什么 UI 框架等);该代码可以创建建筑物并将其放入列表中。同样的代码可以执行另一个按钮点击;它将创建另一个建筑物并将其放入列表中。如果有要创建的建筑物数量的选项,则点击代码可以查看该选项并在循环中创建它应该创建的任意数量的建筑物,并将它们放入列表中。

如果这不能满足您的需求,请澄清您的问题。

编辑:在数组中的对象上设置值

Building building = buildings.get(desiredIndex);
building.setDesiredValue("42");

您可以交替使用:

buildings.get(desiredIndex).setDesiredValue("42");

但我认为这更难阅读。

仅供参考,“无限”数量的对象只能在具有无限内存的机器上支持;我认为这意味着“在运行时确定”。

于 2014-10-10T16:16:19.147 回答