Я пытаюсь преобразовать ArrayList, который содержит "карты", или объекты, которые хранят два числа, ранг и костюм. Обычно для получения одного экземпляра карты я использую:
dealer.dealerhand.get(1).showstats();
Где showstats возвращает строку и:
public String showstats()
{
String realsuit = "";
if(this.suit == 0)
{
realsuit = "Diamonds";
}
else if(this.suit == 1)
{
realsuit ="Hearts";
}
else if(this.suit == 2)
{
realsuit = "Clubs";
}
else if(this.suit == 3)
{
realsuit = "Spades";
}
String str = "My rank is: " + this.rank + " My Suit is: " + realsuit;
return str;
}
Я пробовал до сих пор:
public String[] getStats()
{
String[] dealerstats = this.dealerhand.toArray(new String[this.dealerhand.size()]);
return dealerstats;
}
а также
public String[] getStats()
{
String[] dealerstats = {""};
for(int i = 0; i < this.dealerhand.size(); i++)
{
dealerstats[i] = (dealerhand.get(i).showstats());
}
return dealerstats;
}
Но они оба не работают. Конечной целью будет массив строк из карт в файле ArrayList дилера, который я распечатаю с помощью JList. Благодарю!
Для этого:
public String[] getStats() {
for(int i = 0; i < this.dealerhand.size(); i++) {
dealerstats[i] = (dealerhand.get(i).showstats());
}
return dealerstats;
}
убедитесь, что вы инициализируете свой массив строк, например, ниже:
public String[] getStats(Dealer dealer) { // Input a dealer
String[] dealerstats = new String[dealer.dealerhand.size()]; // Initialize String array
for(int i = 0; i < this.dealerhand.size(); i++) {
dealerstats[i] = dealerhand.get(i).showstats();
}
return dealerstats;
}
Я также предполагаю, что у вас есть объект Dealer
, поскольку вы, похоже, ссылаетесь на него в своем вопросе.
Ваша вторая попытка почти правильна. Вы создали массив, но не указали правильный размер. Размер String[] dealerstats
должен быть размером с dealerhand
ArrayList:
public String[] getStats()
{
String[] dealerstats = new String[ dealerhand.size() ];
for( int i = 0; i < dealerstats.length; ++i )
dealerstats[i] = dealerhand.get(i).showstats();
return dealerstats;
}
Если вы определяете метод toString()
в классе Card
вы можете распечатать ArrayList
без какого-либо преобразования (здесь пример Live Ideone):
public class Card{
...
@Override public String toString(){
return "My rank is: " + this.rank + " My Suit is: " + this.suit;
}
}
Тогда вы можете просто использовать:
List<Card> dealerCards = new ArrayList<Card>();
dealerCards.add(new Card(5, "Hearts"));
dealerCards.add(new Card(10, "Diamonds"));
System.out.println(dealerCards);
Результат: ["My rank is: 5 My Suit is: Hearts", "My rank is: 10 My Suit is: Diamonds"]