ArrayIndexOutOfBounds与Java中的readfile创建对象数组

ArrayIndexOutOfBounds与Java中的readfile创建对象数组,java,arrays,object,readfile,Java,Arrays,Object,Readfile,我一直在为OpenUni做一个练习,它要求我从一个文本文件中检索到的信息创建几个对象。它几乎可以工作,但我一直在获取ArrayIndexOutOfBoundsException:1在第58行。可能是一个简单的问题,但由于我是一个新手,这让我感到困惑,我确信我的令牌[]编号为0-8,所以我不确定出了什么问题……任何帮助都会很棒 package ReadWriteObjectThang; import java.util.Scanner; public class NinjaListMain {

我一直在为OpenUni做一个练习,它要求我从一个文本文件中检索到的信息创建几个对象。它几乎可以工作,但我一直在获取ArrayIndexOutOfBoundsException:1在第58行。可能是一个简单的问题,但由于我是一个新手,这让我感到困惑,我确信我的令牌[]编号为0-8,所以我不确定出了什么问题……任何帮助都会很棒

package ReadWriteObjectThang;

import java.util.Scanner;

public class NinjaListMain {


public static void main(String[] args) {
    FileReadWrite jin = new FileReadWrite();
    Scanner scanny = new Scanner(System.in);

    Ninja ninja[] = new Ninja[3];

    System.out.println("Enter 1 to create 3 new Ninja Objects \n Enter 2 to create 3 Ninja Objects from file");
    int choice = scanny.nextInt();
    scanny.nextLine();
    int hp = 0;
    int x = 1;
    int z = 0;
    String info = " ";

    if(choice==1){
        System.out.println("Enter a name for your ninja crew");
        String newCrew = scanny.nextLine();

        for(z = 0;z<3;z++){
            System.out.println("Enter a name: ");
            String name = scanny.nextLine();
            System.out.println("Enter a weapon: ");
            String weapon = scanny.nextLine();
            System.out.println("Enter hitpoints in whole numbers: ");
            hp = scanny.nextInt();
            scanny.nextLine();

            ninja[z] = new Ninja(name,weapon,hp);
            info = info + name + " " + weapon + " " + hp + ",";
        }

        jin.write(newCrew, info);

    }
    else if(choice==2){
        System.out.println("Enter file name for ninjas to create");
        String oldCrew = scanny.nextLine();

        String oldInfo = jin.read(oldCrew);
        String tokens[] = oldInfo.split("\\s");
        int w = 0;
        for(z = 0;z < 3;z++){
            if(z==0)
                w = 0;
            else if(z==1)
                w = 3;
            else
                w = 6;

            String name = tokens[0 + w];
            String weapon = tokens[1 + w];     //AIOOBE happens here or line below
            hp = Integer.parseInt(tokens[2 + w]);

            ninja[z] = new Ninja(name,weapon,hp);

        }
    }

    for(int g = 0;g<3;g++){
        System.out.println(ninja[g].getName() + " " + ninja[g].getWeapon() + " " + ninja[g].getHP());
    }

}


}



public class Ninja {


private String name;
private String weapon;
private int hitpoints;


public Ninja(String a, String b, int c){
    name = a;
    weapon = b;
    hitpoints = c;
}
package ReadWriteObjectThang;
导入java.util.Scanner;
公共类NinjaListMain{
公共静态void main(字符串[]args){
FileReadWrite jin=newfilereadwrite();
Scanner scanny=新扫描仪(System.in);
忍者忍者[]=新忍者[3];
System.out.println(“输入1创建3个新的忍者对象\n输入2从文件创建3个忍者对象”);
int choice=scanny.nextInt();
scanny.nextLine();
int hp=0;
int x=1;
int z=0;
字符串信息=”;
如果(选项==1){
System.out.println(“为你的忍者团队输入一个名字”);
字符串newCrew=scanny.nextLine();

对于(z=0;z命令
oldInfo.split(\\s”);
没有返回您期望的长度为5或5以上的数组。

您的
字符串标记[]=oldInfo.split(\\s”);
对于您正在使用的索引来说不够大…或者索引太大。我建议您进行一些调试,或者只是显示一些信息,而不是仅仅考虑查找错误。代码显然没有达到您期望的效果

也不应重用该z变量,请在for循环中声明它:
for(int z=0;…

尝试打印
1+w
tokens.length()的值,因为
1+w可能是>tokens.length()
能否显示堆栈跟踪?使用标记器拆分文件是否更好..我有一个任务即将完成,需要将大量信息拆分为一个对象数组解决了readFile方法中的问题,解决了问题..现在工作正常..读取文件生成了一个没有空格的字符串。…duhDo如果你喜欢,不要忘记向上(箭头)的答案。