0

playingCard.javaファイルで定義されたArrayListの新しいインスタンスを初期化しようとしています。

import java.util.ArrayList;

public class PlayingCard 
{

    public enum Value { Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten,
        Jack, Queen, King, Ace}

    public enum Suit { Spades, Diamonds, Hearts, Clubs }

    private final Value value;

    private final Suit suit;

    /**
    * Constructs a card with specified initial value and suit
    * @param value
    * @param suit 
    */

    public PlayingCard(Value value, Suit suit) 
    {
        this.value = value;
        this.suit = suit;
    }

    /**
     * Retrieves the value of a card
     * @return value
     */

    public Value getValue() 
    { 
        return value; 
    }

    /**
     * Retrieves the suit of the card
     * @return suit
     */

    public Suit getSuit() 
    { 
    return suit; 
    }

    /**
    * Custom toString
    *@return value and suit as a string.
    */

    @Override
    public String toString() 
    { 
        return "PlayingCard[value=" + value + ", suit=" + suit + "]"; 
    }

    /**
     * Format method to print out the value and suit of a card.
     * @return value and suit as a string.
     */

    public String format()
    {
        return value + " of " + suit + ", ";
    }

    /*private static final List<PlayingCard> deck = new ArrayList<PlayingCard>();

    // Initialize deck
    static 
    {
        for (Suit suit : Suit.values())
        {
            for (Value value : Value.values())
            {
                 deck.add(new PlayingCard(value, suit));
            }
        }
    }*/
}

最後の12行ほどがコメントアウトされていない場合は、コードに問題はありません。ただし、別のテストドライバーでデッキを初期化し、コードをコピーするときに2つのエラーを受け取りたいと思います。テストドライバーは現在次のようになっています。

import java.util.ArrayList;

public class PlayingCardTester 
{
public static void main (String[] args)
{
    static  List<PlayingCard> deck = 
        new ArrayList<PlayingCard>();

    // Initialize deck
    static 
    {
        //for ea PlayingCard.Suit suit in PlayingCard.Suit.values()
        for (PlayingCard.Suit suit : PlayingCard.Suit.values())
        {
            for (PlayingCard.Value value : PlayingCard.Value.values())
            {
                deck.add(new PlayingCard(value, suit));
            }
        }

    }
}
}

テストドライバーの14行目にエラーがあります

static  List<PlayingCard> deck = new ArrayList<PlayingCard>();

違法な表現の始まりだと言っています。ステートメントの前で別のキーワードを使用しようとしましたが、エラーは同じままです。2番目のエラーは、「null」とだけ書かれた最後の括弧です。私は列挙型を使用するのが初めてなので、それは私が見落とした非常に単純なものである可能性があります...

4

3 に答える 3

2

static静的メソッドでの宣言は必要ありません。

List<PlayingCard> deck = new ArrayList<PlayingCard>();

また、Static Blockすでに静的なコンテキストにいるため、必要はありません。


参照:

  1. Static Initialization Blocks
于 2012-12-05T17:38:12.297 に答える
0

注:これは最も一般的な方法ですが、クラス定義の最初にフィールドを宣言する必要はありません。それらを使用する前に、それらを宣言して初期化する必要があるだけです。

リンク

static variable or blockメソッド内に入れることはできません。mainどちらもメソッドの範囲外である必要があります。

public class PlayingCardTester 
{
    static  List<PlayingCard> deck = new ArrayList<PlayingCard>();

    // Initialize deck
    static 
    {
        //for ea PlayingCard.Suit suit in PlayingCard.Suit.values()
        for (PlayingCard.Suit suit : PlayingCard.Suit.values())
        {
            for (PlayingCard.Value value : PlayingCard.Value.values())
            {
                deck.add(new PlayingCard(value, suit));
            }
        }

    }
    public static void main (String[] args)
    {
        ...
    }
}
于 2012-12-05T17:38:53.143 に答える
0

PlayingCardTesterで定義する必要があります

static  List<PlayingCard> deck = 

mainメソッドの外側:「publicstaticvoidmain」の1行上

于 2012-12-05T17:41:17.760 に答える