Java 如何将arraylist的前四个元素移动到另一个arraylist中?

Java 如何将arraylist的前四个元素移动到另一个arraylist中?,java,arraylist,Java,Arraylist,谢谢你的帮助,我已经设法在提供的答案的帮助下使它工作 这是我的主要课程: import data.Deck; import java.util.ArrayList; public class Game { public static void main(String[] args) { // TODO code application logic here ArrayList<Card> deck = new ArrayList<Car

谢谢你的帮助,我已经设法在提供的答案的帮助下使它工作

这是我的主要课程:

import data.Deck;
import java.util.ArrayList;

public class Game {
    public static void main(String[] args) {
        // TODO code application logic here
        ArrayList<Card> deck = new ArrayList<Card>();

        Deck getdeck = new Deck();
        deck = getdeck.get32Cards();

        for (Card info : deck) {
            System.out.println(info); //this just prints all the 
        }        
    }

}
这是我的甲板课:

package data;

import business.Hand;
import business.Card;
import business.Card.Rank;
import business.Card.Suit;
import java.util.ArrayList;
import java.util.Collections;

public class Deck {

    ArrayList<Card> deck = new ArrayList<Card>();

    public ArrayList<Card> get32Cards() {

        deck.add(new Card(Suit.SPADES, Rank.JACK));
        deck.add(new Card(Suit.SPADES, Rank.KING));
        deck.add(new Card(Suit.SPADES, Rank.SEVEN));
        deck.add(new Card(Suit.SPADES, Rank.EIGHT));
        deck.add(new Card(Suit.SPADES, Rank.NINE));
        deck.add(new Card(Suit.SPADES, Rank.TEN));
        deck.add(new Card(Suit.SPADES, Rank.ACE));
        deck.add(new Card(Suit.SPADES, Rank.QUEEN));
        deck.add(new Card(Suit.HEARTS, Rank.JACK));
        deck.add(new Card(Suit.HEARTS, Rank.KING));
        deck.add(new Card(Suit.HEARTS, Rank.SEVEN));
        deck.add(new Card(Suit.HEARTS, Rank.EIGHT));
        deck.add(new Card(Suit.HEARTS, Rank.NINE));
        deck.add(new Card(Suit.HEARTS, Rank.TEN));
        deck.add(new Card(Suit.HEARTS, Rank.ACE));
        deck.add(new Card(Suit.HEARTS, Rank.QUEEN));
        deck.add(new Card(Suit.CLUBS, Rank.JACK));
        deck.add(new Card(Suit.CLUBS, Rank.KING));
        deck.add(new Card(Suit.CLUBS, Rank.SEVEN));
        deck.add(new Card(Suit.CLUBS, Rank.EIGHT));
        deck.add(new Card(Suit.CLUBS, Rank.NINE));
        deck.add(new Card(Suit.CLUBS, Rank.TEN));
        deck.add(new Card(Suit.CLUBS, Rank.ACE));
        deck.add(new Card(Suit.CLUBS, Rank.QUEEN));
        deck.add(new Card(Suit.DIAMONDS, Rank.JACK));
        deck.add(new Card(Suit.DIAMONDS, Rank.KING));
        deck.add(new Card(Suit.DIAMONDS, Rank.SEVEN));
        deck.add(new Card(Suit.DIAMONDS, Rank.EIGHT));
        deck.add(new Card(Suit.DIAMONDS, Rank.NINE));
        deck.add(new Card(Suit.DIAMONDS, Rank.TEN));
        deck.add(new Card(Suit.DIAMONDS, Rank.ACE));
        deck.add(new Card(Suit.DIAMONDS, Rank.QUEEN));

        Collections.shuffle(deck); //this shuffles the deck

        return deck;
    }

我还有一门手牌课和一门球员课。我打算让两名玩家每人有一个手牌实例。我不知道如何移除“deck”arraylist的前四张卡,然后将其插入另一个arraylist。我也不知道该写哪个类的代码。请告知。

尝试创建另一个ArrayList newArraLIst,如下所示:

   ArrayList<Card> newArraLIst = new ArrayList<Card>();
    if(deck.size() >= 4){
    for (int i = 0 ; i < 4 ; i++) {
        newArraLIst.add(deck.remove(i));
      }        
    }
for (Rank rank : Rank.values()){
        for (Suit suit : Suit.values()){
            deck.add(new Card(suit, rank);
        }
    }
public static final int HAND_SIZE = 4;

for (int i = 0; i < HAND_SIZE; i++){
    for (Player player : game.getPlayers()){
         player.getHand().add(deck.pop());
    }
}
我建议你在你的牌组中使用ArrayList而不是ArrayList,这样更有意义。然后,您可以使用pop方法同时获取和移除顶卡。 但是,您可以使用以下n次来将甲板的第一个元素一直移动到手的起点。在您的情况下,将n替换为4

   ArrayList<Integer> hand = new ArrayList<>();
      for(int i = 0; i<n;i++){
        hand.add(0, deck.get(0));
                deck.remove(0);
}

我对你的代码有一些建议。首先,将这些卡片添加到牌堆中看起来有点难看,我建议您这样做:

   ArrayList<Card> newArraLIst = new ArrayList<Card>();
    if(deck.size() >= 4){
    for (int i = 0 ; i < 4 ; i++) {
        newArraLIst.add(deck.remove(i));
      }        
    }
for (Rank rank : Rank.values()){
        for (Suit suit : Suit.values()){
            deck.add(new Card(suit, rank);
        }
    }
public static final int HAND_SIZE = 4;

for (int i = 0; i < HAND_SIZE; i++){
    for (Player player : game.getPlayers()){
         player.getHand().add(deck.pop());
    }
}
另外,你的牌组应该是一堆牌,手牌可以是一排牌。当你从牌组中发牌时,应该如下所示:

   ArrayList<Card> newArraLIst = new ArrayList<Card>();
    if(deck.size() >= 4){
    for (int i = 0 ; i < 4 ; i++) {
        newArraLIst.add(deck.remove(i));
      }        
    }
for (Rank rank : Rank.values()){
        for (Suit suit : Suit.values()){
            deck.add(new Card(suit, rank);
        }
    }
public static final int HAND_SIZE = 4;

for (int i = 0; i < HAND_SIZE; i++){
    for (Player player : game.getPlayers()){
         player.getHand().add(deck.pop());
    }
}
这段代码从牌组中向游戏中的每个玩家发放4张牌。
deck.pop移除堆栈中的最后一张卡并将其返回。这样,您可以在玩家手中添加一张牌,然后用一行代码将其从牌堆中移除。

您的庄家或游戏职业将持有该代码。只需在一个ArrayList上调用remove,并通过调用add…,将获得的项传递给另一个ArrayList。。。。e、 例如,handList.adddeckList.remove0;或者最好调用手和甲板的方法。我有点惊讶,你没有先尝试一下就问了这个问题。以下是文档文件:。看看,哪种方法最适合这个:-。下一次,请尝试一下,告诉我你被困在哪里了。所以这不是一个赋值转储。我尝试过一些东西,例如:public boolean giveFourCardsCard c{for int x=1;x<3;x++{if deck.containsc{deck.removec;Hand1.addc;return true;}else return false;}return false;}这确实有效,谢谢,但我还想从原始的deck arraylist中删除元素…有什么想法吗?我知道我必须使用.remove如果我用.remove方法替换.get方法,你可以使用remove方法,这样行吗?确定你可以这样使用.adddeck.removei;正如我之前所说,我有一手牌和一个球员级别。我想知道,我有两个玩家,每一个都有一手牌,每一手牌从牌组中取出四张牌。所以我们决定了如何从牌组中取出四张牌,但是我如何实现它,以便我的主类生成两个玩家实例,每个玩家生成一个手牌实例,那么我要做的就是将单词“ArrayList”改为“Stack”以使用该代码?也许现在更清楚了。该代码用于ArrayList。堆栈本来是一个更好的选择,这取决于您还要做什么。