我有一个数组错误,说它超出界限我不知道出了什么问题。这是我的代码:
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])
}
}
}
非常感谢您的帮助!
答案 0 :(得分: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
。
答案 1 :(得分:0)
在获得所需的大小后,您没有重新初始化数组类。您的设计作为一个整体需要一些工作,因为您过度依赖静态(全局)状态。
在gameVar中:
public static int size; // <-- by default this is zero
public static String nameArray[] = new String[size]; // <-- Initialized here to size zero!
在mainThread中:
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];
但正如我之前提到的,你应该重新考虑你的设计(设计一个没有静态变量的正确类)。
答案 2 :(得分:0)
在字段声明中,当您将public static int size;
Java默认值大小设置为0.因此,当您创建String数组时,数组的大小为0.
通常,不建议在字段声明中创建新对象。相反,只是
public static String nameArray[];
然后在知道大小之后将nameArray设置为新的String数组。
size = input.nextInt();
nameArray[] = new String[size];
for(......
答案 3 :(得分:0)
Array
大小本质上是静态的,nameArray
声明为size
为零,因为static size variable
没有初始化,它将默认为0.
所以nameArray[counter]
它必须填充Array超出绑定的异常。
您必须使用正确的大小初始化数组。
nameArray = new String[size];
答案 4 :(得分: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())
}
}
}
答案 5 :(得分:0)
默认情况下,size的值为零。是否创建了大小为0的数组。
例如:public static String nameArray[] = new String[0];
因此你得到了例外。为变量大小指定一些值。
答案 6 :(得分:0)
初始化数组时,它的大小设置为0.
public static String nameArray [] = new String [size];
如果你改变后者的大小值 size = input.nextInt();
它会更改整数变量大小的值,但不会更改数组的大小,这就是您收到错误的原因。你可以通过打印后面的数组大小(nameArray.length)来检查它。
你需要在获得'size'的值后初始化它。