2012-03-22 7 views
0

から2DのArrayListを作成:2D配列リストに私はこのようになりますファイルから整数を取得しようとしているファイル

1;2;3;4; 
5;6;7;8; 
9;10;11;12; 

。私はIndexOutOfBoundsExceptionを得続ける:

ArrayList<ArrayList<Integer>> myList = new ArrayList<>(); 
       myList.add(new ArrayList<Integer>()); 
     int i = 0; 
     int j = 0; 
     try 
     { 
      FileReader fin = new FileReader("data.txt"); 
      Scanner scan = new Scanner(fin); 
      while(scan.hasNext()) 
      { 
       if(scan.hasNextInt()) 
       { 
        myList.get(j).add(scan.nextInt()); 
        i++; 
       } 
       else if("\\n".equals(scan.next())) 
       { 
        myList.add(new ArrayList<Integer>()); 
        j++; 
       } 
       else 
       { 
        System.out.println("Only use numbers!"); 
       } 
      } 

     }catch(Exception e){} 

    System.out.println(myList.get(0).get(2)); 

ここでの問題は何ですか?

+0

エラーがどこで発生しているか知っていますか? –

+0

私はさらに: "IndexOutOfBoundsException:Index:2、Size:0"と書いています。プログラムが整数をarraylistsに追加していないと仮定して、arraylistsはどんな要求によっても境界から外れます。 – Sprawl63

+1

おそらくあなたのファイルを見つけることはできませんが、あなたは例外を飲み込んでいます。 – bcarlso

答えて

0

まず、スタックトレースをキャッチブロックに印刷してください。見た目からあなたはそこのどこかで爆破して例外を飲み込むので、あなたのプログラムが間違っていることさえ知りません。

+1

素晴らしいコメントです。特に良い答えはありません。 –

+0

十分に公正。より多くの情報が与えられた場合、私は答えを編集するだろうと考えました... – bcarlso

+0

答えはスタックトレースによくあります... –

0

あなたは

else if("\\n".equals(scan.next())) 
      { 
       myList.add(new ArrayList<Integer>()); 
       j++; 
      } 

一部についてよろしいですか?私はそれが "\ n"と思ったでしょう。もう1つの選択肢は、おそらくあなたのスキャナを使用し、行全体を把握し、行を解析することです。コードを見てみると、else文が実行されることはないという理論が示唆されています...?

0

エラーがこの部分myList.get(0)リターンサイズ0の空のリストとは、あなたがget(2)でそうはIndexOutOfBoundsExceptionがスローされてのそれの3番目の要素を取得したいことを起こっ何このライン

System.out.println(myList.get(0).get(2)); 

で発生し、プラスのことが必要サイズをチェックする前にそれを取得しようとすると、コードが整数をリストに追加しないので、このようなエラーは発生しません。

関連する問題