0

配列エラーが発生しました。範囲外であり、何が問題なのかわかりません。これが私のコードです:

import java.util.*;
public class gameVar {
    public static int size;
    public static int counter;
    public static Scanner input = new Scanner(System.in);
    public static String currentIn;
    public static String nameArray[] = new String[size];
}

および2番目のクラス(6行目でエラーが発生している場所):

public class mainThread extends gameVar {
public static void main(String[] args){
    System.out.println("Please type the desired amount of players: ");
    size = input.nextInt();
    for(int counter = 0; counter < size; counter++){
        System.out.println("Please enter the name of player " + nameArray[counter])
        }
    }
}

あなたの助けは大歓迎です!

4

7 に答える 7

1

以下は、ゼロ要素の配列を割り当てます。

public static int size;
public static String nameArray[] = new String[size]; // <<<< Here, `size` is zero

配列の初期化を次の場所に移動する必要がありますmain()

public static void main(String[] args){
    System.out.println("Please type the desired amount of players: ");
    size = input.nextInt();
    nameArray = new String[size]; // <<< THIS
    for(int counter = 0; counter < size; counter++){
        System.out.println("Please enter the name of player " + nameArray[counter])
        }
    }
}

= new String[size]その後、 の宣言からを削除できますnameArray

于 2013-03-24T08:17:39.340 に答える
0

必要なサイズを取得した後、配列クラスを再初期化しませんでした。静的 (グローバル) 状態に過度に依存しているため、設計全体に何らかの作業が必要です。

gameVar:

public static int size; // <-- by default this is zero
public static String nameArray[] = new String[size]; // <-- Initialized here to size zero!

メインスレッドで:

size = input.nextInt(); // <-- size is no longer zero
for(int counter = 0; counter < size; counter++) {
  System.out.println("Please enter the name of player " + nameArray[counter]); // <-- But your array is still size zero!
}

簡単な修正は、新しいサイズを取得した後にこれを行うことです。

nameArray = new String[size];

しかし、前に述べたように、設計を再考する必要があります (静的変数を使用せずに適切なクラスを設計します)。

于 2013-03-24T08:18:09.310 に答える
0

フィールド宣言で、public static int size;Java のデフォルト サイズを 0 に設定すると、文字列配列を作成すると、配列のサイズは 0 になります。

一般に、フィールド宣言で新しいオブジェクトを作成することはお勧めできません。むしろ、持っているだけ

public static String nameArray[];

次に、サイズがどうなるかがわかった後で、nameArray を新しい String 配列に設定します。

size = input.nextInt();
nameArray[] = new String[size];
for(......
于 2013-03-24T08:18:16.043 に答える
0

Arrayサイズは本質的に静的であり、初期化がないためゼロnameArrayで宣言され、デフォルトの 0 になります。sizestatic size variable

そのためnameArray[counter]、範囲外の例外の配列を設定する必要があります。

正しいサイズで配列を初期化する必要があります。

nameArray = new String[size];
于 2013-03-24T08:18:49.750 に答える
0

MainThreadクラスは次のようになります。

public class mainThread extends gameVar {
public static void main(String[] args){
    System.out.println("Please type the desired amount of players: ");
    size = input.nextInt();
    nameArray = new String[size];//reinitialize the nameArray here.
    for(int counter = 0; counter < size; counter++){
        System.out.println("Please enter the name of player " + nameArray[counter]=input.next())
        }
    }
}
于 2013-03-24T08:20:01.800 に答える
0

サイズの値は、デフォルトではゼロです。したがって、配列はサイズ 0 で作成されます。例:public static String nameArray[] = new String[0];

したがって、例外が発生します。変数サイズに何らかの値を割り当てます。

于 2013-03-24T08:20:56.340 に答える
0

配列を初期化すると、そのサイズは 0 に設定されます。

public static String nameArray[] = new String[size];

後者のサイズの値を変更する場合 size = input.nextInt();

整数変数のサイズの値は変更されますが、配列のサイズは変更されないため、エラーが発生します。配列のサイズ (nameArray.length) を後で出力することで確認できます。

「サイズ」の値を取得した後、初期化する必要があります。

于 2013-03-24T08:35:24.503 に答える