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