-2

プログラムを書いていて、別のクラスのメソッドにアクセスしたいです。使用したいメソッドの新しいオブジェクトを作成することになっていることは知っていますが、それを行うたびに、「コンストラクタ Card() は未定義です」と表示されます。ただし、コンストラクターにはアクセスしたくありません。そのクラスの別のメソッドにアクセスしたいのです。

これが、「他の」メソッドを導入したいメソッドの最初の部分です。新しいオブジェクトを作成しようとしましたが、* __ *の間にある部分でエラーが発生します。

public void addCard(Card[][]card) {
    Card card1;
    card1 = *new Card();*

もう一方のメソッドは単純に呼び出されますgetCard(int r, Suit s)(これは別のクラスにあります)。このクラスにはコンストラクターメソッドもあり、それがエラーが話しているようです..?

あなたがそれを助けることができれば、それは素晴らしいことです、ありがとう!

ここに私のカードクラスがあります:

public class Card {
private static Card[][] card = new Card[4][13];
private int rank;
public enum Suit{hearts, diamonds, clubs, spades};
private Suit suit;

private Card(int r, Suit s){
    this.suit = s;
    this.rank = r;
}

public int getRank(){
    return rank;
}

public Suit getSuit(){
    return suit;
}

public static Card[][] getCard(int r, Suit s){
    if(card == null){
        return card;
    }
    else{
        card = new Card[4][13];
        return card;
    }
}
4

4 に答える 4

4

次のような新しいオブジェクトをインスタンス化する必要があります。

Card card = new Card();

一方、そのクラスのオブジェクトをインスタンス化せずにクラスのメソッドを使用するように設計している場合は、staticキーワードを探しています。静的に定義されたメソッドと変数は、オブジェクトではなくクラスのプロパティとして定義されます。したがって、staticオブジェクトを初期化せずにメソッドを使用できます。

public Class A{
  public static void methodName(){
    //you can call that methods from anywhere using A.methodName();
  }
}
于 2013-03-06T04:25:24.737 に答える
2

クラスのインスタンスをセットアップしようとすると、コンストラクターが自動的に呼び出されます。

別のコンストラクターを作成しない限り、既定の引数のないコンストラクターが自動的に生成されます。実行したら、以下のように、引数なしのコンストラクターを自分で指定する必要があります。

public Card(){}
于 2013-03-06T04:25:02.603 に答える
1

ユーザーがパラメーター化されたコンストラクターを定義する場合、デフォルトのコンストラクターはコンパイラーによって提供されないため、コンストラクターにパラメーターを与えずにオブジェクトを作成したい場合、ユーザーはデフォルトのコンストラクターを定義する必要があります。

public Card()
{
    //do something
}

プライベート コンストラクターがあるようです。コンストラクターを次のように変更します。

public Card(int r, Suit s)
{
    this.suit = s;
    this.rank = r;
}

注: 次の方法で Card オブジェクトを作成する場合:

Card card1;
card1 = new Card();

public 引数コンストラクターなし (つまり、public Card(){}) または何も定義できません (何もない場合: コンパイラーは引数コンストラクターを提供しません)。

この方法で Card オブジェクトを作成する場合:

Card card1, card2;
card1 = new Card();
card2 =  new card(1,new Suit());

上に示したように、両方のコンストラクターを含める必要があります。

于 2013-03-06T04:24:44.650 に答える
0

引数付きのコンストラクターを作成すると、JVMは(パラメーターなしで)デフォルトのコンストラクターを非表示にします。したがって、引数なしでコンストラクターを定義する必要があります。次に、コンストラクターを定義する必要があります。

public Card(){
}

または、パラメーター化されたコンストラクターを使用してオブジェクトを作成しますnew Card(params)

于 2013-03-06T04:27:01.977 に答える