0

私はプログラミングがまったく初めてで、Java でポーカー プログラムを作成しようとしています。

このコードは Player クラスにあり、ここで空の手を作成しようとしています。どのように配列を埋めても (このようなループなどで)、Eclipse は、hand[1] や hand[ i ] などでメソッドを呼び出そうとすると、null ポインターがあることを通知します。

通常、コンパイル時エラーはありません。しかし、手札にある各カードを個別に作成すると (以下を参照)、コンパイラーが混乱します...

以下の Player と Class の関連フラグメント。

私は何を間違っていますか?かなり調べましたが、まだわかりません。
前もって感謝します!

class Player {

// Sets up a blank card array called "hand"
// with five (0,0) slots for real cards.
private Card[] hand = new Card[5];

private Card hand[0] = new Card(0, 0);  // error: syntax error on token "0", delete this token
private Card hand[1] = new Card(0, 0);  // error: syntax error on token "1", delete this token
private Card hand[2] = new Card(0, 0);  // error: syntax error on token "2", delete this token
private Card hand[3] = new Card(0, 0);  // error: syntax error on token "3", delete this token
private Card hand[4] = new Card(0, 0);  // error: syntax error on token "4", delete this token

class Card {
// Sets the default suit/number to zero.
// Lucky for me, such a 0-0 Card does not exist.
private int number = 0;
private int suit = 0;

// Constructs the Card itself by giving it a number and suit.
// Numbers/suits can *only* be set here.

public Card(int n, int s) {

    // Bound tester for suit/number values.
    // Number has to be between 1 and 14 inclusive (Ace low-Ace high).
    // Suit has to be between 1 and 4 inclusive (H/C/D/S).
    if (n > 0 && n <= 14 && s > 0 && s <= 4) {
        number = n;
        suit = s;
    }
4

2 に答える 2

4

変数の宣言と配列の初期化が混在しているため、構文的に正しくないコードになります。ストレージとして使用する配列を既に宣言しているため、ブロックを使用して初期化できます。

private Card[] hand = new Card[5];

{
    hand[0] = new Card(0, 0); 
    hand[1] = new Card(0, 0);
    hand[2] = new Card(0, 0);
    hand[3] = new Card(0, 0);
    hand[4] = new Card(0, 0);
}

配列をすべて 1 行で宣言して初期化することもできます。

private Card[] hand = new Card[] {
    new Card(0, 0),
    new Card(0, 0),
    new Card(0, 0),
    new Card(0, 0),
    new Card(0, 0),
};
于 2013-04-04T03:19:01.563 に答える
0

エラーの理由は、行

private Card hand[0] = new Card(0, 0);

Java への宣言のように見え、単純な識別子しか宣言できません。

于 2013-04-04T03:17:43.997 に答える