2013-09-30 53 views
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. 

我知道我解释它非常可怕,但希望,这足以了解我的情况。现在,我想随机选择一个类型为circle的对象。

我的思维过程是做一个单独的方法,1,找到开始索引和2,找到结束索引,然后使用随机函数。有没有更好的方法来解决这个问题,只能从圈子中随机选择?

+0

问题是你为什么使用'Vector'?我认为你似乎想要使用字典数据结构而不是序列。 – nachokk

+0

当你说随机的时候,你的意思是所有的类型都有相同的机会,或者你的意思是说更常见的类型有更高的变化。如果选择一个随机元素,IE是“矩形:三角形:圆形”1:2:3“还是”1:1:1“的比例? –

+0

@ Dgrin91我只需要圈子,所以这是一个获得圈子的平等机会,但0其他任何机会。 –

回答

1

使用集合API:

Collections.shuffle(v); 
Object random = v.get(0); 
+0

谢谢,我会研究它。 –

+0

我不认为这是正确的答案,这是答案的%50 .. – nachokk

+0

它会“洗牌”整个向量。 – trashgod

0

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

否则,你可以在阵列中没有组相似的对象,并选择从一组相似对象的随机对象在不同的​​类,比如你的数组问...除非你不当

+0

我很确定你可以做什么海报要求。 – pamphlet

+0

是的,我可以做到,但我只是寻找更简单的方法。但我同意,数据结构最终会是最好的。 –

0

这听起来陷害你的问题就像一个相当简单的随机挑选问题。所有你需要做的是产生一个随机数,并得到该元素 -

v.get(Random.nextInt(v.size())); 
+0

是的,但只有圈子可以选择,这使得它更复杂一点。 –

+0

@GigaTocka为什么不把圆圈放在不同的容器中? –

+0

@ Dgrin31 yea有很多不同的方法来做到这一点,但我正在寻找它与一个单一的矢量工作。 –

0

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

最好的解决方案可能是控制对这个向量的读写访问;基本上,如果你有插入不同形状的具体方法,你可以保持控制,并始终确保东西插入到正确的位置。此时,只需存储两个int s即可知道第二和第三部分在选择时的起始位置。

虽然个人而言,如果可能的话,我只会使用三个独立的向量。

相关问题