0

ファイルから読み取ろうとすると、arrayindexoutofboundsexception が発生するという私の小さな問題があります。私はそれを説明するためのより良い、またはより詳細な方法を知らないので、コードとエラーを以下に貼り付けます。これはすべて、私のプログラムのメインメソッドにあります。

    File fila;
    String[] innlesningsarray=new String[500];

    try{
        Scanner innFil=new Scanner(new File("/uio/hume/student-u77/makrist/Downloads/akronymer.txt"));

        while(innFil.hasNext()){
        for(int i=0; i<500; i++){

        // String innLest=br.nextLine();
            innlesningsarray=innFil.nextLine().split("\t");
            System.out.println(innlesningsarray[i]);
            System.out.println(innFil.nextLine());
        }
        System.out.println("test");
        }
        System.out.println("Test2");

    } catch(Exception e){
        System.out.print(e);
    }
    }
}

この部分の後、頭字語などのオブジェクトがありますが、エラーはありません...

エラー:

AA 自動応答

AAB 全対全ブロードキャスト

java.lang.ArrayIndexOutOfBoundsException: 1

4

1 に答える 1

2

nextLine()ループ内で 2 回実行します。これにより、ファイル内の 2 行が読み取られます。

while(innFil.hasNext())true1行残っていれば戻ることができます。次に行うことは、その while ループで 2 行を読み取ることです。1 行しか残っていないため、例外が発生します。

forループにも配置しています。つまりreadLine()、1 行だけをチェックしながら、500*2 回のメソッドを実行します。

次のことを試してください。

try{
    Scanner innFil=new Scanner(new File("/uio/hume/student-u77/makrist/Downloads/akronymer.txt"));

    while(innFil.hasNext()){
        for(int i=0; i<500; i++){
            String theReadLine = innFil.nextLine();
            innlesningsarray=theReadLine.split("\t");
            System.out.println(innlesningsarray[i]);
            System.out.println(theReadLine);
        }
        System.out.println("test");
    }
    System.out.println("Test2");

    } catch(Exception e){
        System.out.print(e.printStackTrace);
    }
}

これにより、メソッドで発生する可能性があるエラーが解決されますnextLine()innlesningsarray実際に 500 以上のエントリがあることを確認する必要があります。そうでない場合、例外が発生します。acronymer.txt ファイルに文字列が\t500 回以上含まれていることを確認してください。

コードも変更しましcatchた。あなたの代わりにprint(e)書くべきe.printStackTrace()です。これにより、例外に関する多くの有用な情報が出力されます。Roland Illig のコメントに感謝します。

于 2013-11-13T09:28:39.740 に答える