2016-11-30 7 views
2

私はJavaでポーカーゲームを作っています。私たちの先生はJavaをよく知らないので、教師の助力によって指示が書かれました。私はカードとして動作する2つの文字列(すなわち、 "2h" = "2つの心")のための記憶空間として役立つHand.javaクラスを作成しようとしています。コンストラクタ内の別の配列を持つArrayListフィールドを初期化する必要がありますか?

  • 手のクラスをインスタンス化することを目的とする次のように

    彼の命令があります。これは、ゲーム内で片手で を表し、主に配列 で構成されます。

  • フィールド:ArrayListのカードカードの収納スペースハンドリスト項目に
  • コンストラクタ:ハンド(文字列[])はカードの2文字の略語の アレイとカードのフィールドを初期化します。
  • 方法:無効addCard(String)をカードフィールドに 略語で表さカードを追加し

は、ここで私がこれまで持っているものです。

import java.util.*; 
public class Hand { 

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

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

public void addCard(String card) { 
    cards.add(card); 
} 

(詳しい手順)最終テストでは、メインプログラムで次のコマンドシーケンスを使用する必要があります。プログラムセグメント:

Hand h = new Hand("3c", "4s", "5d", "6h", "7h"); //program is upset with this line 
h.printHand(); 
h.addCard("8d"); 
h.addCard("3d"); 

は出力する必要があります

Printing Hand: 5 cards – 3c 4s 5d 6h 7h 
Adding Card: Eight of Diamonds (8d) 
Adding Card: Three of Diamonds (3d) 

は私が狂ったアム、または私は実際に手クラスのコンストラクタ内の配列が必要なのでしょうか? "のコンストラクタ:カードの2文字の略語の配列でカードのフィールドを初期化する" アドバイスをいただければ幸いです。 クラス内のフィールドとして渡さ配列を保存する必要はありません

+1

'Hand h = new Hand(new String [] {" 3c "、" 4s "、" 5d "、" 6h "、" 7h "});' –

+2

最初に、あなたは 'array'または' cards'を必要とし、両方ではないと思います。新しいHandは配列をとります。 'new Hand(new String [] {" 3c "、" 4s "、" 5d "、" 6h " 、 "7h"}); 'はコンパイルエラーを取り除くべきです。 –

答えて

1

、それはどこでも使用されることはありません。この配列は、メインカードリストを初期化するためにコンストラクタに渡されたばかりです。

コンストラクタを呼び出すたびに、新しいカードで新しい手を作成して初期化しています。

あなたはちょうどので、あなたのクラスには、次のようになります渡さ配列からコンストラクタでカードフィールドを初期化することができます

import java.util.*; 
public class Hand { 
    ArrayList<String> cards = new ArrayList<String>(); 

public Hand(String[] array) { 
    cards = Arrays.asList(array); 
} 

public void addCard(String card) { 
    cards.add(card); 
} 

そして、あなたのメインクラスでは、手を開始クラスを次のように指定します。

Hand hand = new Hand(new String[]{"3c", "4s", "5d", "6h", "7h"}) 
+0

申し訳ありませんが、投稿した最初のコードスニペットに従うのに苦労しています。だから私はこれをするだろうか? 'public class Hand { パブリックString []配列; ArrayList cards = new ArrayList (); public Hand(String [] array){ cards = Arrays.asList(array); } ' – Yoleaux

+0

私は自分の答えを編集しました。今すぐ確認してください。私の考えは、別のフィールドに渡された配列を保存する必要がないので、あなたのクラスから "配列"フィールドを取り除くことです。コンテンツは既にカードリストに保存されています。 –

+0

それはあなたと動作する場合は、他人を助けるために私の答えを確認してください、ありがとう。 –

1

教師によれば、 Stringという配列のパラメーターを持つコンストラクターが必要です。私はあなたのアプローチが正しいと思いますが、コンストラクタの2文字列の配列を初期化した後です。 ArrayListcardsにも追加する必要があります。そのため、カードは同じコンテナにあります。

「コンストラクタ:カード用 2文字の略語の配列とカードフィールドを初期化し、」私はあなたの先生が、あなたは、配列の文字列を初期化する必要があることをここで言ってとされていることを考える

ArrayListcardsフィールドに入力します。 、

public Hand(String[] array) { 
    cards.addAll(Arrays.asList(array)); 
} 

と方法によって、このことから、あなたの初期設定を変更します:あなたはこのようにそれを置くことができ、これに

Hand h = new Hand("3c", "4s", "5d", "6h", "7h"); 

を:

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

私はこれがうまくいったと思います!どうもありがとうございます! – Yoleaux

+0

それがうまくいくなら、他人を助けるために私の答えをチェックしてください。ありがとう:) – msagala25

0

私も同じ問題に取り組んでいます。コードを実行すると、すべてがnullになります。これで助けてもらえれば助かります。私はそれがcard.javaと関係があると思う。

+0

コードを投稿した場合は、私のコードをチェックしてください。https://github.com/aepries/A8-Poker – Yoleaux

関連する問題