2016-12-11 2 views
-2

Я понятия не имею, что я делаю неправильно. Я пишу программу Java с картами и классами рук. Когда я запускаю свою основную программу он просто печатает нулевойКарточка и ручная игра продолжают возвращать null при запуске программы

import java.util.ArrayList; 
public class Hand { 
//Field 
public String [] array; 
private ArrayList<String> cards = new ArrayList<String>(); 
//Constructor 
public Hand(String [] array) { 
    this.array = array; 
} 
//Methods 
public void addCard(String card){ 
    cards.add(card); 
} 
public void removeCard(String card){ 
    cards.remove(card); 
} 
public static void printHand(){ 
System.out.print(Card.printCard()); 

} 

public class Card { 
//fields 
public static String num2rank, rank2abbrv, num2suit, suit2abbrv; 
//constructor 
public Card (String num2rank,String rank2abbrv,String num2suit,  
      String suit2abbrv){ 
this.num2suit = num2suit; 
this.num2rank = num2rank; 
this.rank2abbrv = rank2abbrv; 
this.suit2abbrv = suit2abbrv; 
} 
//Methods 
public static String getRank(){ 
return num2rank; 
} 
public static String getSuit(){ 
return num2suit; 
} 
public static String getName(){ 
String result = ""; 
String rank = getRank(); 
String suit = getSuit(); 
result += rank + " of " + suit; 
return result; 

} 
public static String getAbbrev(){ 
String result = ""; 
String rank = rank2abbrv; 
String suit = suit2abbrv; 
result += rank + suit; 
return result; 
} 
public static String printCard(){ 
String results = ""; 
results += "Printing Hand: " + getAbbrev(); 
results += "\n" + getName(); 
return results; 
} 
} 

public class main { 

public static void main(String[] args) { 

Hand h = new Hand((new String []{"3c", "4s","5d","6h","7h"})); 
h.printHand(); 

} 
} 

Они оба мои руки и карты классов. Класс ранга и костюма - это всего лишь деловая карта, а также их костюм и ранг. Когда я запускаю свою основную команду, когда она выводит значение null. Я хочу, чтобы он печатал, например, «7s» и «seven of hearts»

+1

Пожалуйста, включите вашу карту исходный код класса. – SporreKing

+3

Вам нужно разместить хорошо построенный [mcve]. Прочтите раздел [help], чтобы задать вопрос, как улучшить этот вопрос и ваши будущие вопросы. –

+2

И что "возвращает null"? Опять же, пожалуйста, улучшите этот вопрос. –

ответ

0

Во-первых, у вас нет экземпляров Card в вашем коде.

Класс Hand имеет массив и список строк

public String [] array; 
private ArrayList<String> cards = new ArrayList<String>(); 

Вы действительно должны выбрать только один, и обновить конструктор соответственно

public Hand(String [] array) { 
    this.array = array; 
} 

Теперь, если вы хотите использовать Card , изменить эти методы, чтобы принять один

public void addCard(Card card){ 
    cards.add(card); 
} 
public void removeCard(Card card){ 
    cards.remove(card); 
} 

(Вам нужно cha nge тип списка, и метод удаления не будет работать так, как вы думаете, из-за неопределенности объекта, который вы не определили, но это будущие проблемы)

Предполагаете, вы хотите, чтобы printHand() действительно печатал руку , правильно? Поэтому вам нужен цикл, а не только печать одной карты.


Насколько обеспокоен класс карты, вы можете в значительной степени полностью удалить static ключевое слово в этом классе - вы хотите методы экземпляра и переменные (за объект), из них не на уровне класса (все карты одни и те же стоимость).

И, наконец, в какой-то момент вам нужно сделать new Card(...).

Что-то вроде этого (частично псевдокоде)

List<Card> cards = new ArrayList<>(); 
Hand h = new Hand(cards); 
h.addCard(new Card(...)); 
h.printHand(); 
Смежные вопросы