在java中随机播放一个arraylist

时间:2016-12-08 19:57:32

标签: java arraylist shuffle

使用ArrayList,我需要将一个牌组细分为两个部分,一个是顶部,另一个是底部。顶部将是ArrayList arr的前面。如果ArrayList arr的大小恰好是奇数,则顶部区域大小必须比底部区域大1。下面你会看到一些更多的规格,似乎有轻微的逻辑错误,但我无法弄清楚在哪里。正如您所看到的,我几乎所有的代码都已编写,我觉得这应该可行。我需要在不使用集合的情况下进行随机播放。

4 个答案:

答案 0 :(得分:2)

for(int i =0; i<topHalf.size();i++){

topHalf.size()将返回0,因为您还没有元素。初始化时,你只是为底层数组分配一个大小,但是arraylist的大小为0 ......

答案 1 :(得分:0)

另外,您可以使用子列表方法。

// divide by two and round up
int middle = (int)(arr.size() / 2.0f + 0.5f);

ArrayList<Battleable> topHalf = arr.sublist(0, middle);
ArrayList<Battleable> bottomHalf = arr.sublist(middle, arr.size());

答案 2 :(得分:0)

最简单的方法是使用'子列表'方法。你可以这样做:

Double middle = Math.ceil(new Double(arr.size())/2);<br>
topHalf = arr.subList(0, middle.intValue());<br>
bottomHalf = arr.subList(middle.intValue(), arr.size());

答案 3 :(得分:0)

我唯一的改变是添加一个三元运算符(简化?)代码:

ArrayList<Battleable> topHalf = new ArrayList<Battleable>();
int topSize = arr.size() % 2 == 0 ? arr.size()/2 : (arr.size()/2)+1;
for(int i = 0; i < topSize; i++) {
    topHalf.add(i, arr.get(i));
}

ArrayList<Battleable> bottomHalf = new ArrayList<Battleable>();
int count = topHalf.size();
int bottomSize = arr.size() - topHalf.size();
for(int i = 0; i < bottomSize; i++) {
    bottomHalf.add(i, arr.get(count));
    count++;
}

int x = 0, y = 0;
int end = arr.size();
for(int i = 0; i < end; i++) {
    if(I % 2 == 0) {
        arr.add(i, topHalf.get(x));
        x++;
    } else {
        arr.add(i, bottomHalf.get(y));
        y++;
    }
}