使用删除和添加方法进行列表

时间:2018-10-17 01:18:02

标签: java

将卡的前半部分移到firstHalf中  //这可能会或可能不会在一行代码中完成       将卡片中的剩余元素移至secondHalf  //这可能会或可能不会在一行代码中完成       虽然firstHalf中有元素          在firstHalf的开头删除元素,然后将其添加到卡片中          在secondHalf的开头删除元素并将其添加到卡片中       末了       如果secondHalf剩余任何元素          在secondHalf的开头删除元素并将其添加到卡片中       EndIf

这是我遇到的错误。如果我要删除,为什么列表会增加?我应该在第一个for循环中做这样的事情吗? firstHalf.add(cards.remove(0));
cards = firstHalf.add(cards.remove(0));

这是我遇到的错误
shuffle()不应更改卡中元素的数量。纸牌包含一个完整的52张纸牌,但现在的尺寸为:71个预期值:<52>但为:<71>

public void shuffle(ListGenerator gen) {


    List<PlayingCard> firstHalf = gen.createNewList();
    List<PlayingCard> secondHalf = gen.createNewList();
    for (int i = 0; i <= (cards.size() / 2); i++) {
     firstHalf.add(cards.remove(0));
    }
    secondHalf.addAll(cards);
    while (firstHalf.isEmpty() == false) {
        cards.add(firstHalf.remove(0));
        cards.add(secondHalf.remove(0));
    }
    if (secondHalf.isEmpty() == false) {
        cards.add(secondHalf.remove(0));
    }
}*

5 个答案:

答案 0 :(得分:3)

您需要清除cards,因为卡仍然具有先前添加到secondHalf的元素

secondHalf.addAll(cards);
cards.clear();
//^^^^^^^^^^^^

答案 1 :(得分:1)

致电secondHalf.addAll(cards);时,并没有从cards中删除这些卡。此后添加:

cards.clear();

答案 2 :(得分:1)

您正在使用相同的变量,即在for循环中使用card,并且还从同一card变量中删除了该项目。因此,实际上您在firstHalf中添加的元素数量较少,并且卡的大小仍超过其原始大小的一半。

 for (int i = 0; i <= (cards.size() / 2); i++) {
  firstHalf.add(cards.remove(0));
}

for循环之后:: 18

的firstHalf的大小

for循环后的卡的大小:: 34

您应该为循环使用其他变量。 喜欢:

List<Integer> cardSize = cards.size();
  for (int i = 0; i <= (cardSize / 2); i++) {
  firstHalf.add(cards.remove(0));
}

我相信它应该可以解决您的问题。

答案 3 :(得分:0)

我希望

secondHalf.addAll(cards);

不从卡中删除条目。在该行之后添加测试以查看卡是否为空。

答案 4 :(得分:0)

secondHalf.addAll(cards)

在这里,您要将元素添加到secondHalf中,但没有删除卡片中的元素。将以下行添加到代码中。

cards.clear();