2017-10-31 8 views
1

4列と150のデータを含むcsvファイルを読み込みます。まず、各行を文字列配列に読み込んで整数配列に変換します。私はそれをarraylistに変換しました。ループ中にarraylistを表示しようとすると、最後の配列エントリのみが表示されます。 whileループを完了したら、すべての値をarraylistに入れて別の関数に渡します。この目標を達成するにはどうすればよいですか?ArrayListはネストループの外側の最後の要素のみを返します

import java.io.BufferedReader; 
    import java.io.FileReader; 
    import java.util.*; 


public class ReadInputCSV { 
    public static void main(String[] args) throws Exception { 
     List<Integer> intList = new ArrayList<Integer>(); 

     BufferedReader CSVFile = new BufferedReader(new FileReader("C:/Users/sana/Desktop/DATASET/shuttle.csv")); 

     String dataRow = CSVFile.readLine(); 
     while (dataRow != null){ 
     String[] dataArray = dataRow.split(","); 
     int[] intsArray=new int[dataArray.length]; 
     for(int i=0;i<dataArray.length;i++) 
     { 
        intsArray[i]=Integer.parseInt(dataArray[i]);     
     } 

     intList = new ArrayList<Integer>(intsArray.length); 

     for (int i=0; i<intsArray.length; i++) 
     { 
        intList.add(intsArray[i]); 
     } 

     dataRow = CSVFile.readLine();    

     } 
     CSVFile.close(); 
    } 

} 
+0

リストを印刷したり、別の方法に渡そうとしていますか?私はいずれかの試みを見ない。 – shmosel

+0

配列リストは、1行のデータを格納するだけです。メソッドにすべてのデータを渡す方法をどのように計画していますか?また、ファイルをループすることもありません。 –

答えて

-1

whileループ内でintListを初期化しないでください。

intList = new ArrayList<Integer>(intsArray.length); 

そして、この命令の後に、あなたのintListで件のデータを追加します。行の下 は、あなたが持っているあなたのwhileループの各反復において

intList = new ArrayList<Integer>(intsArray.length); 
0

を必要とされていません。したがって、ArrayListの新しいインスタンスは、各繰り返しでintList変数に関連付けられているため、最後の反復のデータのみが表示されるのが普通です。

また、あなたは組み合わせることができます。

String dataRow = CSVFile.readLine(); 
    while (dataRow != null){ 

    //... 

dataRow = CSVFile.readLine(); 

よりコンパクト下記のフォームに:あなたのコード、これらの変更を適用し

String dataRow = null; 
while ((dataRow = CSVFile.readLine()) != null) { 
    // Your loop instructions here 
} 

のようなものになり:

import java.io.BufferedReader; 
    import java.io.FileReader; 
    import java.util.*; 


public class ReadInputCSV { 
    public static void main(String[] args) throws Exception { 
     List<Integer> intList = new ArrayList<Integer>(); 

     BufferedReader CSVFile = new BufferedReader(new FileReader("C:/Users/sana/Desktop/DATASET/shuttle.csv")); 

     String dataRow = null; 
     while ((dataRow = CSVFile.readLine()) != null){ 
      String[] dataArray = dataRow.split(","); 
      int[] intsArray=new int[dataArray.length]; 
      for(int i=0;i<dataArray.length;i++) 
      { 
       intsArray[i]=Integer.parseInt(dataArray[i]);     
      } 

      // No more instanciation of the intList here 

      for (int i=0; i<intsArray.length; i++) 
      { 
        intList.add(intsArray[i]); 
      } 

      // No more CSVFile.readLine() here    
     } 
     CSVFile.close(); 
    } 
} 

これはあなたを与える必要がありますあなたのArrayList内のすべてのデータが、どのデータがどの行から来るかを知る方法がありません。それはあなたのための問題ではない場合、これはあなたのために動作するはずです。

関連する問題