0
我試圖編寫一個代碼來構建一個52張牌堆,然後將這些牌交給n個玩家(這對一些玩家來說可能有額外的牌)。獲勝者是擁有黑桃王牌的人。程序運行不正常
public class CardGame {
public static void main(String[] args) {
int numberOfPlayers = Integer.parseInt(args[0]);
CardPile deck = CardPile.makeFullDeck();
CardPile [] players = new CardPile[numberOfPlayers];
for (int i=0;i<numberOfPlayers;i++) {
int numofnum = i%numberOfPlayers;
players[i] = new CardPile();
}
for (int i=0;i<52;i++) {
int numofnum =i%numberOfPlayers;
CardPile curPlayer = players[i%numberOfPlayers];
Card nextCard = deck.get(i);
players[numofnum].addToBottom(nextCard);
}
for (int i=0;i<numberOfPlayers;i++) {
if (players[i].find(Suit.SPADES, Value.ACE) != -1) {
System.out.println("Player " + i + " is the winner");
}
}
}
}
這裏是CardPile
public class CardPile{
private Card[] cards;
private int numCards;
public static void main(String[] args){
}
public CardPile(){
Card[] constructor = new Card[52];
cards = constructor;
numCards = 0;
}
public boolean isEmpty(){
return this.numCards==0;
}
public void addToBottom(Card c){
int i = 0;
for(i = 0;i<52;i++){
if(cards[i]==null){
break;
}
}
numCards = i;
cards[i] = c;
}
public Card get(int i){
return cards[i];
}
public Card remove(int i){
Card removed = cards[i];
for(i = i;i<51;i++){
cards[i]=cards[i+1];
}
cards[51]= null;
numCards=numCards-1;
return removed;
}
public int find(Suit a,Value b){
int i = 0;
for(i=0;i<52;i++){
if(cards[i].getSuit()==a && cards[i].getValue()==b){
break;
}
else{
i = -1;
return i;
}
}
return i;
}
public String toString(){
String x = "";
String y = "";
for(int i=0;i<numCards;i++){
y = cards[i].toString();
x = x + i + "." + y +" ";
}
return x;
}
public static CardPile makeFullDeck(){
CardPile pile = new CardPile();
for(Value v: Value.values()){
for(Suit s: Suit.values()){
pile.addToBottom(new Card(s,v));
}
}
UtilityCode.shuffle(pile.cards, pile.numCards);
return pile;
}
}
我的問題是,有時當我運行CardGame它打印出「玩家X是贏家」,但有時不顯示任何信息。任何人都可以幫助我嗎?謝謝
請進行調試以找出問題所在。爲了找出爲什麼有時它打印出勝者,有時候不打印,就把打印語句用來監視變量的值,條件的輸出,計算等等,找出哪裏出了問題,在哪裏? – Raf