当我运行程序时,卡和手游戏一直返回null

时间:2016-12-11 16:38:32

标签: java

我不知道我做错了什么。我正在编写一个带有卡片和手工课程的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();

}
}

这些都是我的手牌和卡牌。等级和套装类只是卡片的案例陈述以及它们的套装和等级。当我运行main时,它打印出null。我希望它打印出来例如&#34; 7s&#34;和&#34;七颗心&#34;

1 个答案:

答案 0 :(得分: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);
}

(您需要更改列表类型,并且remove方法将无法按您认为的方式工作,因为您尚未定义的对象相等,但这些是未来的问题)

我假设您希望printHand()实际打印手,对吗?所以你需要一个循环,而不仅仅是打印一张卡。

就Card类而言,您几乎可以完全删除该类中的static关键字 - 您需要实例方法和变量(每个对象),而不是类级别(所有卡共享相同)值)。

最后,你需要在某个时候制作一个new Card(...)

像这样的东西(部分伪代码)

List<Card> cards = new ArrayList<>();
Hand h = new Hand(cards);
h.addCard(new Card(...));
h.printHand();