Почему я получаю этот странный вывод Hand@2802cf63?
Я не уверен, почему я получаю этот вывод. когда я пытаюсь напечатать карточную комбинацию для своей покерной программы. Я знаю, что я могу использовать множество вещей, чтобы сделать это более эффективным, например, перечисления. но это для класса, поэтому я ограничен тем, что я могу использовать. Я никогда не работал с Collections.Suffle в моем классе Deck, так что я не уверен, что сделал все правильно. То же самое с переопределением в моем классе карты.
Любые предложения о том, как заставить эту программу распечатать 5 карточек?
Карта:
public class Card
{
String suits;
String values;
public Card(int suit, int value)
{
if (suit == 0)
{
suits = "Spades";
}
else if (suit == 1)
{
suits = "Clubs";
}
else if (suit == 2)
{
suits = "Hearts";
}
else
{
suits = "Diamonds";
}
if (value == 0)
{
values = "2";
}
else if (value == 1)
{
values = "3";
}
else if (value == 2)
{
values = "4";
}
else if (value == 3)
{
values = "5";
}
else if (value == 4)
{
values = "6";
}
else if (value == 5)
{
values = "7";
}
else if (value == 6)
{
values = "8";
}
else if (value == 7)
{
values = "9";
}
else if (value == 8)
{
values = "10";
}
else if (value == 9)
{
values = "Jack";
}
else if (value == 10)
{
values = "Queen";
}
else if (value == 11)
{
values = "King";
}
else
{
values = "Ace";
}
}
@Override
public String toString()
{
return values + " of " + suits;
}
}
Колода:
import java.util.Arrays;
import java.util.Collections;
public class Deck
{
Card[] deck = new Card[52];
public Deck()
{
int element;
for(int iSuit = 0; iSuit < 4; iSuit++)
{
for(int iValue = 0; iValue < 13; iValue++)
{
element = iSuit * 13 + iValue;
deck[element] = new Card(iSuit, iValue);
}
}
}
public void shuffle()
{
Card[] newDeck = new Card[52];
int element = (int) (Math.random()*52);
Collections.shuffle(Arrays.asList(deck[element]));
public Card dealCard(int card)
{
return deck[card];
}
}
Рука:
public class Hand
{
Card[] hand = new Card[5];
public Hand(Deck deck)
{
int element;
for(int card = 0; card < 4; card++)
{
hand[card]=deck.dealCard(card);
}
}
}
Главный:
public class FiveCardPoker
{
public static void main(String[] args)
{
Deck timsDeck = new Deck();
timsDeck.shuffle();
Hand timsHand = new Hand(timsDeck);
System.out.println(timsHand);
}
}
5 ответов
Hand
не переопределяет метод toString объекта. Таким образом, вы получаете стандартный метод toString. Переопределите метод toString чем-то вроде этого:
public String toString() {
StringBuffer sb = new StringBuffer();
for(int card = 0; card < 4; card++)
{
sb.append(hand[card]+",")
}
return sb.toString()
}
Так как ты не переопределил toString()
он берет реализацию из класса Object, который является неявным суперклассом всех классов.
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Выход не случайный.. это: ClassName.ItsHashCode;
, Вы должны переопределить toString()
за Hand
Класс и показать его содержимое / сообщение (я).
Override toString()
метод в классе Hand это уберет вашу ошибку. вернуть значение String из toString()
метод т.е. что вы хотите напечатать, когда печатается объект Hand Class.
Так как ты не переопределил toString()
в Hand
он использует реализацию по умолчанию от Object
ссылка: http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html
Любые предложения о том, как заставить эту программу распечатать 5 карточек?
Вы можете переопределить toString()
в Hand
лайк:
@Override
public String toString() {
//format according to your requirements
return Arrays.asList(hand).toString();
}
или создать отдельный метод в классе Hand
показать карты:
public void printCards() {
//format according to your requirements
System.out.println(Arrays.asList(hand));
}
и использовать его в своем основном как:
timsHand.printCards();