2016-04-24 9 views
-2

このエラーが発生し、テキストファイルから配列を取り込もうとしています。私はそれが私のifループと関係があるかもしれないと思うが、私は本当にわからない。それは私にmyData[9]の範囲外エラーを与えています。私がしたいことは、最初の文字がD(次のものはアップデートであることを意味する)であるかどうかを確認して、更新オブジェクトを作成することです。私のupdate.txtファイルには、myData[9]が私に範囲外のエラー(具体的にはlastThirtyに設定しようとするところ)を与えている理由が混乱しているので、myDataを入力するためのものが10個しかありません。次のように配列インデックスが文字列ファイルから読み込み中にエラーが発生する

scan = new Scanner(file); 
while (scan.hasNext()) 
{ 
    String str = scan.nextLine(); 
    String[] myData = str.split("#"); 
    if (myData[0].equalsIgnoreCase("D")) 
    { 
     recordType = myData[0]; 
     actionCode = myData[1]; 
     boxID = Integer.parseInt(myData[2]); 
     movieID = Integer.parseInt(myData[3]); 
     movieTitle = myData[4]; 
     movieGenre = myData[5]; 
     releaseYear = myData[6]; 
     inStock = myData[7]; 
     totalRentals = Integer.parseInt(myData[8]); 
     lastThirty = Integer.parseInt(myData[9]); 
     updates[count] = new UpdateRecord(recordType, actionCode, boxID, movieID, movieTitle, movieGenre, releaseYear, inStock, totalRentals, lastThirty); 
     count++; 
    } 

ファイルの内容は次のとおりです。

H#Title Town Video Mart Updates#04\24\2016 
D#A#4#5#Harry Potter#Action#2001#True#50#5 
D#A#4#5#Shutter Island#Suspense#2001#True#50#5 
D#A#4#5#The Blind Side#Drama#2001#True#50#5 
D#A#4#5#Borat#Comedy#2001#True#50#5 
D#A#4#5#Bad GrandPa#Comedy#2001#True#50#5 
T#Title Town Video Mart Updates#04\24\2016#5 
+1

配列にはインデックス9のオブジェクトがないようです。ファイルを表示してください。 – Gendarme

+0

いずれかの行に10個未満の項目があるか、またはファイルが 'updated'配列よりも多くの行を持っています(固定サイズの配列ではなく' List'にしたいと思うかもしれません)。コードのどの行にエラーが発生したかを指定した方が簡単です。 –

+0

上記の抜粋の17行目で発生します。更新オブジェクト配列のサイズは200で、ファイルには5つの更新しかないため、問題はありません。私はちょうどダブルtxtファイルをチェックし、すべての更新は10項目を持って、更新コンストラクタは10項目があり、私はそれを10のものを渡しています。 – Thomas

答えて

1

それはとても10nth要素が原因とアクセス、TXTが書かれている方法によって異なりますが、おそらくString[] myData = str.split("#");リターンのみ配列の長9エラー。

たとえば、 "boo#と#foo"がString [3]を返すとします。機能するtxtはString [10]を返す必要があります。

別の '#'を追加して動作するかどうかを確認するか、デバッグでアレイの内容を確認することをお勧めします。

+0

メイン・ポストを編集してテキスト・ファイル・データを組み込みました。 "d"の行は正しく書式設定されているようですが、更新用のコンストラクタには10個の項目が入ります – Thomas

+0

はい、投稿した行が正しいようです。あなたがデバッグで何が起こったのか分かりましたら、どこが間違っているのかを簡単に突き止めるべきです。あるいは、配列要素のSystem.out.printlnをいくつか挿入することで、いくつかの有用な洞察が得られるはずです。 –

+0

私は、netBeansでデバッガを使用する方法に慣れていないので、myDataに変数を設定するたびにprintlnを実行し、movieTitleをスキップして最後のインデックスに範囲外を投げているようです。 – Thomas

関連する問題