Пример класса карты Java - печать значений перечисления - PullRequest
0 голосов
/ 01 февраля 2010

Я использую пример карты класса с сайта Java, чтобы попытаться создать игру.

http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html

Я беру в качестве аргументов количество раздач и количество карт на раздачи

нравится: java -jar a02.jar 4 3

Я добавил значения в ряды и костюмы. Я печатаю ПАЛУБУ, потом РУКУ ...

Что я пытаюсь сделать, это сначала распечатать колоду с их значениями раз вместе. например: Десять Червей

Десять = 10 Hearts = 4

Итак, я распечатаю Десять Червей (40)

Когда я печатаю колоду, у меня возникают проблемы с тем, чтобы они печатали в одной строке по количеству карточек в руке. как:

восемь пик (8), десять сердец (40), двойка сердец (8)

Что я могу сделать, чтобы это исправить?

Моя другая проблема заключается в том, что есть лучший способ получить значения карт, чем то, что я делаю? Могу ли я использовать какой-либо тип сравнения?

потому что, когда я распечатываю руку после колоды, мне трудно получить правильные значения и руку (поэтому я закомментировал код)

Я также прокомментировал часть кода в main (), где я получаю значения. как я могу сделать это по-другому?

Имейте в виду, я хочу, чтобы значения печатались также рукой, как я это делаю с колодой

Я замкну вывод ..

вот вывод:

C:\Java\a02>java -jar a1.jar 3 4
THREE of SPADES(3),      // i would like this to print out like hand does below
FIVE of HEARTS(20),
DEUCE of DIAMONDS(6),
KING of CLUBS(20),
DEUCE of HEARTS(8),
TEN of HEARTS(40),
JACK of HEARTS(40),
ACE of HEARTS(44),
NINE of CLUBS(18),
EIGHT of SPADES(8),
QUEEN of SPADES(10),
KING of HEARTS(40),
NINE of SPADES(9),
SEVEN of SPADES(7),
SEVEN of HEARTS(28),
EIGHT of HEARTS(32),
TEN of SPADES(10),
DEUCE of CLUBS(4),
EIGHT of DIAMONDS(24),

// here is the hand - which i also want the values

[SIX of CLUBS, SEVEN of DIAMONDS, TEN of DIAMONDS, TEN of CLUBS]
[SIX of HEARTS, THREE of HEARTS, SIX of SPADES, DEUCE of SPADES]
[JACK of SPADES, NINE of DIAMONDS, SEVEN of CLUBS, THREE of DIAMONDS]

C:\Java\a02>

вот код:

import java.util.*;

public class Cards{

public enum Rank { DEUCE(2), THREE(3), FOUR(4), FIVE(5), SIX(6),
SEVEN(7), EIGHT(8), NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11);

private int Rankpoints;


private Rank(int points)
{
this.Rankpoints = points;  
}

public int getRankpoints() 
{
return Rankpoints;
}


}

public enum Suit { CLUBS(2), DIAMONDS(3), HEARTS(4), SPADES(1);

private int Suitpoints;

Suit(int points)
{

Suitpoints = points;  

}



public int getSuitpoints()
{
return Suitpoints;
}

} 



private final Rank rank;
private final Suit suit;

private Cards(Rank rank, Suit suit) 
{
this.rank = rank;
this.suit = suit;
}



public Rank rank() 
{ 
return this.rank;
}
public Suit suit() 
{

return this.suit;

}

public String toString() 
{ 
return rank + " of " + suit; 
}

private static final List<Cards> protoDeck = new ArrayList<Cards>();

// Initialize prototype deck
static {
for (Suit suit : Suit.values())
    for (Rank rank : Rank.values())
        protoDeck.add(new Cards(rank, suit));

}

public static ArrayList<Cards> newDeck()
{

return new ArrayList<Cards>(protoDeck); // Return copy of prototype deck
}
}

а вот main ()

import java.util.*;

public class Deal {
public static void main(String args[])
{
    int numHands = Integer.parseInt(args[0]);
    int cardsPerHand = Integer.parseInt(args[1]);
    List<Cards> deck  = Cards.newDeck();
    Collections.shuffle(deck);
    int total = 0;
    // ArrayList<Cards> hand = new ArrayList<Cards>();



  // this is how i am handling the values.. which is not good.
 for (Cards card : deck)
 { 

 for(Cards.Suit a : Cards.Suit.values())
 {


 for(Cards.Rank b : Cards.Rank.values())
 {
    if(card.rank() == b)
     {


 if(card.suit() == a)  // as you can see this works. theres got to be a better way??
 {
   total = b.getRankpoints();
  // hand.add(card);
   System.out.println(card.rank() + " of " +  card.suit() + "(" + a.getSuitpoints() * total + ")" + ",");


 }

}
}
   }
}


    for (int i=0; i < numHands; i++)
        System.out.println(deal(deck, cardsPerHand));   // prints the hand
       //deal(deck,cardsPerHand,numHands);
}


// hand
 public static ArrayList<Cards> deal(List<Cards> deck, int n) {
     int deckSize = deck.size();
     List<Cards> handView = deck.subList(deckSize-n, deckSize); 
     ArrayList<Cards> hand = new ArrayList<Cards>(handView);
     handView.clear();
    // Map<String, Map<String, Integer>> inputWords = new HashMap<String, Map<String, Integer>>();
      int total = 0;

      return hand;
    }

   }
 //for (Cards card : hand)
 //{ 

 // for(Cards.Suit a : Cards.Suit.values())
 // {
 //for(Cards.Rank b : Cards.Rank.values())
 // {
  //  if(card.rank() == b)
   //  {

  // if(card.suit() == a)
 //{
  // total = b.getRankpoints();


    // System.out.println("card.rank() + " of " +  card.suit() + "(" + a.getSuitpoints() * total + ")" + ",");
    // return hand;
  //}

 //}
  //}
 //}

   //}
  //return hand;
   //}

   //}

Любая помощь очень ценится. фрагменты кода или подсказки очень приветствуются =) Имейте в виду, я довольно новичок в Java ..

Спасибо

Ответы [ 2 ]

2 голосов
/ 01 февраля 2010

Попробуйте изменить метод класса класса toString () на что-то вроде этого:

public String toString() 
{ 
    return rank + " of " + suit+ "(" + suit.getSuitpoints() * rank.getRankpoints() + ")" + ","); 
}

Тогда это:

   System.out.println(card.rank() + " of " +  card.suit() + "(" + a.getSuitpoints() * total + ")" + ",");

Может стать:

System.out.println(card);
1 голос
/ 01 февраля 2010

Что касается печати всего одной строки, вы ищете System.out.print (), а не System.out.println ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...