有没有办法获得每个玩家的排名?

Is there a way to get the rank of each player?

    import java.util.ArrayList;
    import java.util.Collections;
    
    public class War {
    
      public static void main(String[] args) {
        CardDeck deck = new CardDeck();

    
        int size = deck.Deck().size();
    
        ArrayList player1 = new ArrayList<>(deck.Deck().subList(0, (size) / 2));
        ArrayList player2 = new ArrayList<>(deck.Deck().subList((size) / 2, size));

    
        System.out.println("Player 1: " + player1.get(0));
        System.out.println("Player 2: " + player2.get(0));

CardDeck 方法:创建牌组并洗牌

    import java.util.Arrays;
    import java.util.Collections;
    import java.util.List;
    
    public class CardDeck extends War{
    public int rank;

      private String suit, rankString;
    
    
      public List<String> Deck() {
        String[] cardSuit = {"Hearts", "Spades", "Clubs", "Diamonds"};
         int[] cardRank = {1,2,3,4,5,6,7,8,9,10,11,12,13};
    
        String[] deck = new String[52];
    
        for (int i = 0; i < deck.length; i++) {
          rank = cardRank[i%13];
          suit = cardSuit[i/13];
    
          switch(rank){
            case 1 :
              rankString = "A";
              deck[i] = rankString + " of " + suit;
              break;
            case 11 :
              rankString = "J";
              deck[i] = rankString + " of " + suit;
              break;
            case 12 :
              value = 12;
              rankString = "Q";
              deck[i] = rankString + " of " + suit;
              break;
            case 13 :
              rankString = "K";
              deck[i] = rankString + " of " + suit;
              break;
            default:
              deck[i] = rank + " of " + suit;
    
          }
        }
    
    
        List<String> deckList = Arrays.asList(deck);
    
        Collections.shuffle(deckList);
        return deckList;
      }
    
    }

我只使用 Java 一点点,对创建单独的 getRank 方法的工作方式感到困惑

编辑:按排名,我指的是卡值的整数。所以对于花色 A,我想取回 1, 2=2...J=11, Q=12,K=13.

你把自己弄糊涂了。您的 class 名为 CardDeck。这表明它代表 整副牌 。一副纸牌 没有 等级,也没有花色。当然,我不会去商店买一副只有 52 个黑桃 A 的牌。

这是一张单张牌,有等级和花色。

您的 Deck() 方法 returns 字符串列表。这不是面向对象的。

我建议您执行以下操作:

  • 创建一个名为 Card 的 class。它具有等级和花色字段。我建议你制作这些枚举(enum Suit { SPADES, HEARTS, CLUBS, DIAMONDS; }enum Rank { ACE, TWO, THREE, .., JACK, QUEEN, KING;},但如果你还没有涵盖这些,你可以坚持使用 int。不需要有第三个字段字符串表示,你可以而且应该每次都计算它(它是一台计算机,它每秒可以做几十亿次。如果你要强调性能,内存查找会比计算它慢)。
  • 为卡片添加有用的方法。当然是 public String toString() {},它根据等级和花色计算出一个很好的字符串表示(这将是 rankString + " of " + suit 要去的地方)。
  • 现在创建一个名为 CardDeck 的 class。它只有一个字段 (List<Card>)。创建一个名为 reshuffle() 的方法,它会清除列表,然后生成所有 52 张卡片,然后在其自身上调用 shuffleRemaining()。写 shuffleRemaining() 只是简单地按原样打乱列表。
  • 给它一个构造函数,它自己调用 reshuffle() - 现在 new CardDeck() 给你一副洗好的 52 张牌。
  • 添加更多方法。 draw(),例如,它执行类似 return list.remove(0); 的操作 - 删除 'top' 卡并 returns 它。