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];
}

和第二类(我在第 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

在获得所需的大小后,您没有重新初始化数组类。您的设计作为一个整体需要一些工作,因为您过度依赖静态(全局)状态。

在游戏变量中:

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 时。因此,当您创建 String 数组时,数组的大小为 0。

通常不建议在字段声明中创建新对象。相反,只要有

public static String nameArray[];

然后在知道大小之后将 nameArray 设置为新的 String 数组。

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

Arraysize本质上是静态的,用零nameArray声明,因为没有初始化,它会得到默认的0。sizestatic size variable

所以nameArray[counter]它必须填充 Array 超出范围的异常。

您必须以正确的大小初始化数组。

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

size 的值默认为零。因此创建的数组大小为 0。例如:public static String nameArray[] = new String[0];

因此你得到了例外。为变量大小分配一些值。

于 2013-03-24T08:20:56.340 回答
0

初始化数组时,它的大小设置为 0。

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

如果您更改 size 的值,则 size = input.nextInt();

它会更改整数变量大小的值,但不会更改数组的大小,这就是您收到错误的原因。您可以通过稍后打印数组 (nameArray.length) 的大小来检查它。

您需要在获取“大小”的值后对其进行初始化。

于 2013-03-24T08:35:24.503 回答