在java中洗牌arraylist

在java中洗牌arraylist,java,arraylist,shuffle,Java,Arraylist,Shuffle,使用ArrayList,我需要将甲板细分为两个部分,一个顶部部分和一个底部部分。顶部将是ArrayList的前面arr。如果ArrayListarr的大小恰好是奇数,则顶部部分的大小必须比底部部分大一个。下面您将看到更多的规范,似乎有一个轻微的逻辑错误,但我很难找出在哪里。正如您所看到的,我已经编写了几乎所有的代码,我觉得这应该是可行的。我需要在不使用集合的情况下洗牌。for(int I=0;Ifor(int I=0;I作为旁白,您可以使用sublist方法 for(int i =0; i<

使用ArrayList,我需要将甲板细分为两个部分,一个顶部部分和一个底部部分。顶部将是ArrayList的前面
arr
。如果ArrayList
arr
的大小恰好是奇数,则顶部部分的大小必须比底部部分大一个。下面您将看到更多的规范,似乎有一个轻微的逻辑错误,但我很难找出在哪里。正如您所看到的,我已经编写了几乎所有的代码,我觉得这应该是可行的。我需要在不使用集合的情况下洗牌。

for(int I=0;I
for(int I=0;I作为旁白,您可以使用sublist方法

for(int i =0; i<topHalf.size();i++){
// 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());
//除以二并取整
中间整数=(整数)(arr.size()/2.0f+0.5f);
ArrayList topHalf=arr.sublist(0,中间);
ArrayList bottomHalf=arr.sublist(中间,arr.size());

您可以使用sublist方法

// 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());
//除以二并取整
中间整数=(整数)(arr.size()/2.0f+0.5f);
ArrayList topHalf=arr.sublist(0,中间);
ArrayList bottomHalf=arr.sublist(中间,arr.size());

最简单的方法是使用“子列表”方法。您可以执行以下操作:

Double middle = Math.ceil(new Double(arr.size())/2);<br>
topHalf = arr.subList(0, middle.intValue());<br>
bottomHalf = arr.subList(middle.intValue(), arr.size());
Double middle=Math.ceil(新的Double(arr.size())/2);
topHalf=arr.subList(0,middle.intValue());
bottomHalf=arr.subList(middle.intValue(),arr.size());
最简单的方法是使用“子列表”方法。您可以执行以下操作:

Double middle = Math.ceil(new Double(arr.size())/2);<br>
topHalf = arr.subList(0, middle.intValue());<br>
bottomHalf = arr.subList(middle.intValue(), arr.size());
Double middle=Math.ceil(新的Double(arr.size())/2);
topHalf=arr.subList(0,middle.intValue());
bottomHalf=arr.subList(middle.intValue(),arr.size());
我所做的唯一更改是在代码中添加一个三元运算符(简化?):

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++;
    }
}
ArrayList topHalf=新建ArrayList();
int topSize=arr.size()%2==0?arr.size()/2:(arr.size()/2)+1;
对于(int i=0;i
我所做的唯一更改是在代码中添加一个三元运算符(简化?):

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++;
    }
}
ArrayList topHalf=新建ArrayList();
int topSize=arr.size()%2==0?arr.size()/2:(arr.size()/2)+1;
对于(int i=0;i
ArrayList“arr”实际上有一个预定的大小,因此topHalf.size()应该已经有该大小的一半。@yarcenahs
size()
返回列表中的元素数,而不是基础数组的长度。@yarcenahs yes或
(arr.size()/2+1)
取决于arraylist是奇数还是偶数…arraylist“arr”实际上有一个预定的大小,因此topHalf.size()应该已经有该大小的一半。@yarcenahs
size()
返回列表中的元素数,而不是基础数组的长度。@yarcenahs yes或
(arr.size()/2+1)
这取决于arraylist是奇数还是偶数…我在这一行得到一个空指针:arr.add(I,topHalf.get(x));因为此时topHalf是一个空列表。@LeHill我用arr.size()编辑了for循环/2到目前为止,这样好吗?请确保两个for循环都使用该值,然后您就不会得到空指针。当我使用奇数长度的arr时,下半部分是更大的列表。@LeHill是的,但对于这种情况,上半部分必须更大,如果arr是奇数大小,我使用了arr.size()/2+1表示该循环。这将是对该代码进行的最简单的更改,以使其正常工作。我在这一行上得到一个空指针:arr.add(I,topHalf.get(x));因为此时topHalf是一个空列表。@LeHill我用arr.size()编辑了for循环/2到目前为止,这样好吗?请确保两个for循环都使用该值,然后您就不会得到空指针。当我使用奇数长度的arr时,下半部分是更大的列表。@LeHill是的,但对于这种情况,上半部分必须更大,如果arr是奇数大小,我使用了arr.size()/2+1。这将是对该代码进行的最简单的更改。谢谢,但我相信我仍然可以在没有它的情况下实现正确的执行谢谢,但我相信我仍然可以在没有它的情况下实现正确的执行。最终的循环不应该是arr.size()而不是arr.size()/2?这将只运行一半的ArrayListyYou是对的。最后一点逻辑不断抛出IndexOutOfBoundsException,所以我绕过了它。我也更新了代码来修复它。最终的循环不应该是arr.size()而不是arr.size()吗/2?那只会运行一半的数组。你是对的。最后一点逻辑不断抛出IndexOutOfBoundsException,所以我绕过了它。我也更新了代码来修复它。