2016-12-11 7 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(); 

} 
} 

をプリントアウトし、これらは両方とも私の手とカードクラスです。ランクとスーツのクラスは、カードとそのスーツとランクが何であるかの文例です。私がメインを走らせるとき、それはヌルを印刷する時です。たとえば「7」と「7つの心」のように印刷したい場合

+1

あなたのカードのクラスのソースコードを含めてください。 – SporreKing

+3

よく構築された[mcve]を投稿する必要があります。この質問を改善する方法と今後の質問を表示するには、[ヘルプ]セクションで質問してください。 –

+2

「nullを返す」とは何ですか?再度、この質問を改善してください。 –

答えて

0

まず、コードにCardのインスタンスがありません。

手のクラスが、配列や文字列のリストを持っている

public String [] array; 
private ArrayList<String> cards = new ArrayList<String>(); 
あなたが Cardを使用したい場合は、本当に、今コンストラクタ応じ

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

を1つだけ選ぶと、更新する必要があります

これらのメソッドを1つを受け入れるように変更する

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

リストタイプを指定すると、定義されていないオブジェクトの等価性のためにremoveメソッドは動作しませんが、将来の問題です)

printHand()は、 、 右?つまり、カードを1枚印刷するだけでなく、ループが必要です。


限りカードのクラスが関係しているとして、あなたはかなり完全にそのクラスにstaticキーワードを削除することができます - あなたは(オブジェクトあたり)インスタンスメソッドや変数を望んではなく、クラスレベルのもの(すべてのカードが同じを共有します値)。

最後に、ある時点でnew Card(...)にする必要があります。

このような何か(部分的擬似コード)

List<Card> cards = new ArrayList<>(); 
Hand h = new Hand(cards); 
h.addCard(new Card(...)); 
h.printHand(); 
関連する問題