有没有办法获得每个玩家的排名?
Is there a way to get the rank of each player?
我对如何获得每个玩家的排名有点困惑。我创建了一个排名整数数组,因为我认为这样比较容易,但我不知道如何比较字符串中给定的排名。
对于等级 1,打印出“A of suit”
等级 11 -> “花色 J”
等级 12 -> “花色 Q”
等级 13 -> “花色 K”
有没有办法得到打印出来的rankString的排名?
War创建两个玩家数组的方法,尝试在这里比较,但不确定如何获得排名。
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 它。
我对如何获得每个玩家的排名有点困惑。我创建了一个排名整数数组,因为我认为这样比较容易,但我不知道如何比较字符串中给定的排名。
对于等级 1,打印出“A of suit”
等级 11 -> “花色 J”
等级 12 -> “花色 Q”
等级 13 -> “花色 K”
有没有办法得到打印出来的rankString的排名?
War创建两个玩家数组的方法,尝试在这里比较,但不确定如何获得排名。
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 它。