0

例如,假设一个向量由一些对象组成,其中一个是矩形类型,一些是三角形类型,然后是圆形。

v = [rectangle, triangle, triangle, circle, circle]

矢量的大小可以改变。我可以这样添加另一个圆圈:

v.addElement(circle);

和..

v = [rectangle, triangle, triangle, circle, circle, circle]

但是每个对象类型都像上面一样聚集在一起。它不能像:

v = [rectangle, circle, circle, triangle, circle, triangle] //<-- can't be.

我知道我解释得很糟糕,但希望它足以理解我的情况。现在,我想随机选择,例如,圆形类型的对象。

我的想法是制作一个单独的方法,1,找到开始索引,2,找到结束索引,然后使用随机函数。有没有更优雅的方法来解决这个只能随机选择圆圈的问题?

4

4 回答 4

1

使用集合 API:

Collections.shuffle(v);
Object random = v.get(0);
于 2013-09-30T02:40:52.483 回答
0

您应该使用 hashmap 并将对象类映射为该类的键和相应的对象数组。您可以通过反射来获取类名并设置为键,然后将对象作为值添加到数组中。

否则,您无法将数组中的相似对象分组,并从您所问的不同类数组中的一组相似对象中选择一个随机对象...除非您错误地构想了您的问题

于 2013-09-30T02:41:06.107 回答
0

这听起来像是一个相当简单的随机选择问题。您需要做的就是生成一个随机数并获取该元素 -

v.get(Random.nextInt(v.size()));
于 2013-09-30T02:42:05.717 回答
0

您可以潜在地使用implements关键字来检查对象是否属于某个类型(或该类型的子类型),但这不是一个非常漂亮的解决方案。

最好的解决方案可能是控制对该向量的读写访问;基本上,如果您有插入不同形状的特定方法,则可以保持控制并始终确保将事物插入正确的位置。那时,只需存储两个ints 或这样的东西,就可以知道选择时第二和第三部分从哪里开始。

尽管就个人而言,如果可能的话,我只会使用三个单独的向量。

于 2013-09-30T02:45:36.187 回答