2016-12-03 10 views
0

私は、学校用プロジェクトの一部としてSetゲーム(www.setgame.com)を作成しようとしています。このクラスは、81枚のカードのデッキを取って、それぞれに色、形、数、およびシェーディングを割り当てます。私はちょうど色の部分を最初にしようとしているので、正しい軌道に乗って残りの部分を完了する方法を知っているので、すべての色を赤色にするように単純化しました。 java.lang.StringをSetDeckに変換できないというエラーメッセージが表示され続けます。この問題をどのように解決するかわかりません。これは、文字列要素とint要素を格納するために配列をどのようにブレンドするべきかという疑問の次の部分につながります。私が何をしたのかは分かりませんが、それができている間は分かればあなたの方がはるかに簡単です。私はそれを簡単にやりたいと思っていますが、プロジェクトは配列の最後にarray [0] = "red oval 1 filled"のようなものを印刷したいと考えています。このクラスで私がこれまでに書いたコードは以下の通りです。文字列を(クラス名データ型)に変換できませんJava

詳しい説明や明確性が必要な場合は、お尋ねください。以前のコーディング経験はありませんので、私はさらに説明するために最善を尽くします。

public class SetDeck{ 

private SetDeck [] deck; 
private int top; 
public SetDeck(){ 
    top = 0; 
    deck = new SetDeck[81]; 
    for(int r = 0; r < 80; r++){ 
     deck[r] = "red"; 
    } 
} 
+0

デッキ配列には、Stringオブジェクトではなく、SetDeckオブジェクトが格納されており、Stringで埋めようとしています。しかし、あなたのデザインは、正しく行われた場合、有効なSetDeckオブジェクトで配列を埋めると、コードはStackOverflowをスローします。 SetDeckはなぜそれ自身の配列を保持するのでしょうか? –

+0

あなたのクラスには、各カードの色、形、数、シェーディングを保持する変数がありません。 –

答えて

3

あなたのコードでは、いくつかの問題があります。次に、コンストラクタ内でを試してください。この配列にStringを入力してください。

public SetDeck() { 
     top = 0; 
     deck = new SetDeck[81]; 
     for(int r = 0; r < 80; r++){ 
      deck[r] = "red"; 
     } 
    } 
} 

問題:

  1. デッキ配列は、Stringオブジェクトを保持し、まだあなたはありません」を使用すると、配列は81個の項目を保持するために宣言しましたが、あなたが唯一のそれらの80を埋めるので、私はほとんど言いますそれらを配列に入れようとしています。コンパイラーは、これが許可されていないとあなたに文句を言うのは正しいです。
  2. コードが最初に示唆したことは、SetDeckコンストラクタ内に80個のSetDeckオブジェクトを作成した場合、これらの80個のSetDeckオブジェクトのコンストラクタが呼び出されるため、無限再帰が発生します。これらのコンストラクタは、80以上のSetDeckオブジェクトを作成し、80個のSetDeckオブジェクトを作成します。これにより、プログラムがスタックメモリを使い果たすまで、さらに80個のSetDeckオブジェクトが作成されます。それだけでは、SetDeckがインスタンスフィールドでそれ自体を保持するのは意味がありません。おそらく静的フィールドですが、この状況ではありません。
  3. デッキにはカードオブジェクトが保持されていますが、コードにはカードクラスは表示されません。
  4. カードオブジェクトには色、形状、塗りつぶしなどの特定のプロパティがありますが、配列を塗りつぶすときには色文字列を作成するだけです。

ソリューション:

  • カードクラス、あなたが言及するすべてのプロパティのフィールドを持っているものを作成します。
  • デッキクラスを作成し、カードの配列、またはカードのArrayList<Card>のどちらかを保持するようにします。
  • デッキコンストラクタにカードのコレクションを入力します。
  • ストリングを自分のものではないものにしようとしないでください。
  • 配列やコレクションを塗りつぶすときに「マジック」番号を使用しないでください。 Arrayにはforループで使用する長さプロパティがあり、ArrayListには同様の機能を果たすsize()メソッドがあります。
+0

神様私はこれを単純なタイプミスで苦労してきました。私はいつもの最大の馬鹿のように感じます。ありがとうございました。 –

+0

@DylanKelemen:あなたはすでにカードクラスを持っていますか? –

+0

まだこのクラスは、私が上で言及したプロパティをフィールドしますが、私はそれをすべて開始するのに苦労していました。教授は私が最初にこの問題を解決するまで私が残りをすることができないように私は順番に行かなければならないと主張する。私は今クラスとコンストラクタを同じ名前にしたという事実を見る。私は代わりに他のクラスからSetCardを使うつもりだった。私が間違っていることについて非常に有益な回答をいただき、ありがとうございます。 –

-1

private String[] deck; 

deck = new String[81]; 

を宣言すると、あなたは自分自身の中に同じクラスにしている問題の埋込み

+1

これはエラーメッセージを排除しますが、問題は解決しません。 –

+0

@HerbWolfe ofcourseが私のポイントです – Antoniossss

4
public class SetDeck{ 

    private SetDeck [] deck; 

を修正します。あなたは、色、形、番号、および陰影を持つCardクラスを持っているはずです。 SetDeckクラスにカードの配列またはArrayListを埋め込み、SetDeckコンストラクタ内にこの配列またはArrayListを設定します。

public class SetDeck{ 
    private SetDeck [] deck; 

まずあなたが SetDeckクラス内SetDeck のインスタンスの配列変数を作成します。

+0

@HovercraftFullOfEelsはい。今、私たちは将来もっとうまく行くことができますか?私が知っている限り、あなたはここにいます。 – byxor

+0

@BrandonIbbotson:申し訳ありませんが、あなたとの過去のやりとり、特に悪いやり取りを思い出させません。もし私が失礼だったら、正直に、許しを求めます。 –

+0

@HovercraftFullOfEelsあなたは失礼ではありませんでしたが、私たちの意見は以前に何度もぶつかりました。私はより良い未来を願っています。よろしく。 – byxor

関連する問題