字符串数组错误

时间:2013-03-24 08:15:53

标签: java arrays string println

我有一个数组错误,说它超出界限我不知道出了什么问题。这是我的代码:

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

非常感谢您的帮助!

7 个答案:

答案 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'的值后初始化它。