Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串数组错误_Java_Arrays_String_Println - Fatal编程技术网

Java 字符串数组错误

Java 字符串数组错误,java,arrays,string,println,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 S

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

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类主线程扩展gameVar{
公共静态void main(字符串[]args){
System.out.println(“请键入所需的玩家数量:”;
size=input.nextInt();
用于(int计数器=0;计数器<大小;计数器++){
System.out.println(“请输入玩家名称”+名称数组[计数器])
}
}
}

非常感谢你的帮助

以下命令分配零元素数组:

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

然后,您可以从
nameArray

的声明中删除
=new String[size]
,在获得所需的数组类大小后,您没有重新初始化它。您的设计作为一个整体需要做一些工作,因为您过度依赖静态(全局)状态

在gameVar中:

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

但是正如我前面提到的,您应该重新考虑您的设计(设计一个没有静态变量的适当类)。

在您的字段声明中,当您设置
公共静态int sizeJava默认大小为0。因此,当您创建字符串数组时,数组的大小为0

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

public static String nameArray[];
然后在知道大小后,将nameArray设置为新的字符串数组

size = input.nextInt();
nameArray[] = new String[size];
for(......

数组
大小本质上是静态的,
名称数组
大小
声明为零,因为
静态大小变量
没有初始化,它将得到默认值0

所以
nameArray[counter]
它必须填充数组越界异常

必须使用正确的大小初始化数组

nameArray = new String[size];

您的
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())
        }
    }
}
public类主线程扩展gameVar{
公共静态void main(字符串[]args){
System.out.println(“请键入所需的玩家数量:”;
size=input.nextInt();
nameArray=新字符串[size];//在此处重新初始化nameArray。
用于(int计数器=0;计数器<大小;计数器++){
System.out.println(“请输入玩家名称”+nameArray[counter]=input.next())
}
}
}

大小的值在定义时为零。因此,将创建大小为0的数组。 例如:
publicstaticstringnamearray[]=新字符串[0]


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

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

公共静态字符串nameArray[]=新字符串[size]

如果更改“大小”的值 size=input.nextInt()

它更改整数变量size的值,但不更改数组的大小,这就是为什么会出现错误。您可以通过打印数组的大小(nameArray.length)进行检查


您需要在获取“size”值后对其进行初始化

您确定
nameArray[counter]
对于循环中
counter
的每个值都是有效值吗?如果答案对您有帮助,您可以对其进行评分。:-)
public static String nameArray[];
size = input.nextInt();
nameArray[] = new String[size];
for(......
nameArray = new String[size];
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())
        }
    }
}