0

私はオープンユニの演習を行ってきました。テキストファイルから取得した情報からいくつかのオブジェクトを作成する必要があります。ほとんど機能していますが、58行目でArrayIndexOutOfBoundsException:1が発生し続けています。おそらく単純な問題ですが、私は初心者です。これで私は困惑しました。私はトークン[]の番号が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;
}
4

2 に答える 2

0

String tokens[] = oldInfo.split("\\s");使用しているインデックスに対して十分な大きさではありません...またはインデックスが大きすぎます。バグを見つけることだけを考えるのではなく、デバッグを行うか、単に情報を表示することをお勧めします。コードは明らかにあなたが期待することをしていません。

また、そのz変数を再利用せず、forループで宣言します。 for (int z = 0; ...

于 2013-03-12T13:11:38.013 に答える
0

コマンドoldInfo.split("\\s");は、期待どおりに長さ 5 以上の配列を返しません。

于 2013-03-12T13:10:07.500 に答える