0

良い一日、

私のコードで、1つの宣言が関数の外部でエラーを起こしているという質問があります。

スニペットは次のとおりです。

public class Gold {

    Block[][] block = new Block[4][4];
       
  
        this.block[1][4] = new Block(); //1
      
    
        public void populate() {
            this.block[1][4] = new Block();//2
    }
          
}

コード this.block[1][4] = new Block();番号2にエラーはありません。ただし、関数内にない最初のコードはエラーを示しています。

不正な開始タイプ

シンボルを見つけることができません

']' 期待される

無効なメソッド宣言、戻り型が必要です。

なぜこれが起こっているのか、そして何が欠けているのかを理解したいだけです。

ありがとう

4

9 に答える 9

4

インデックス 4 の要素はありません。最後の要素のインデックスは 3 です。

于 2012-08-22T09:08:24.113 に答える
4

上記のケース 1 のように変数を直接初期化することはできません。次のblock[][]ようにコンストラクターで初期化できます。

public Gold(){
    this.block[1][3] = new Block();
}

または次のようなブロック内:

Block[][] block = new Block[4][4];
{
      this.block[1][3] = new Block();
}
于 2012-08-22T09:08:37.767 に答える
3

コードのブロックになければならないステートメントがあります。

試す

public class Gold {
    Block[][] block = new Block[4][4];
    { // initializer block
        this.block[1][3] = new Block(); //1
    }
于 2012-08-22T09:08:31.980 に答える
3

ここには 2 つの問題があります。スコープ内のオブジェクトを初期化する必要があります。Number 1 line in a constructor or in a function or with in a block (enclosed with in{ and}に電話する必要があります)。ここで と の違いを知る必要がありstatic blockますnon-static blocks

あなたが持っている他の問題は、配列の長さが4であり、5番目に挿入してオブジェクトを作成しようとしているためthis.block[1][4] = new Block();、例外がスローされることです。ArrayIndexOutofBounds

于 2012-08-22T09:12:48.340 に答える
2

コードをコンストラクターに配置する必要があると思います。

public Gold(){
    this.block[1][4] = new Block();
}

Java クラスでは、変数またはメソッド (コンストラクターを含む) を定義できますが、プレーン コードを使用することはできません。

于 2012-08-22T09:07:38.203 に答える
2

クラス本体ではなく、メソッドでコードをラップする必要があります。Goldクラスの初期化の一部で、次のようにコンストラクター内に配置した場合:

public class Gold {

    Block[][] block = new Block[4][4];

    public Gold() {
          this.block[1][4] = new Block();
    }

}

クラス本体では、変数の宣言とインスタンス化のみが許可されますが、オブジェクト (配列) の値の変更などの標準操作は許可されません。

編集: 他の人が指摘したように、インデックス4は size の配列には存在しません。 からまでの4インデックスのみにアクセスできます。03

于 2012-08-22T09:09:21.093 に答える
2
this.block[1][4] = new Block(); //1

フィールドの初期化ではなく式です。メソッド本体の外に置くことはできません。

于 2012-08-22T09:10:25.130 に答える
1

この文章

this.block[1][4] = new Block(); //1

メソッドまたは初期化ブロックの外に出ることはできません。配列を初期化する場合は、宣言またはメソッド内で行う必要があります (コンストラクターが適している場合があります)。または、初期化ブロックを使用する必要があります。

配列の境界も確認してください。Java 配列には 0 ベースのインデックスがあります。

于 2012-08-22T09:08:54.350 に答える
1

コードthis.block[1][4] = new Block()はコンパイルされますが、実行時に失敗します。配列には 4 つの要素がありますが、Java およびすべての C に似た言語のインデックスは 0 から始まるため、4 要素の長い配列の最大値は 3 です。

また、Java ではメソッドの外側にコードを記述できないため、これを試みるとコンパイル エラーが発生します。

于 2012-08-22T09:09:31.570 に答える