2016-06-20 3 views
0

文字列値のArrayListを1つのテーブルから使用しようとしていますが、文字列の末尾が ".tif"か ".tiff"結果の文字列を新しいテーブルに転送します。ただし、このメソッドを呼び出すと、新しいテーブルは最初に変更された文字列のみを受け取ります。私は自分のロジックに何が間違っているのか分かりません。元のテーブルの最初の要素は、条件が満たされているかどうか( ".tif"または ".tiff"で終わる)、そこから文字列変更され、ArrayList fDataに追加され、次のテーブル値に反復されます。なぜfDataに含まれる複数の要素が返されないのか理解できません。Java - forループのArrayList <String>メソッドは1つの要素を返します

public ArrayList<String> getTableData() { 
     StringBuilder str = new StringBuilder(); 
     String fString = null; 
     ArrayList<String> fData = new ArrayList<String>(); 

     while(filePaths != null) {   
      int size = filePaths.size();     
      for (int i = 0; i <= size; i++) { 
       String pathName = filePaths.get(i); 
       if (pathName.endsWith(".tif")) { 
        int pathLength = pathName.length(); 
        str = new StringBuilder(filePaths.get(i)); 
        str.insert(pathLength - 4, "_Data"); 
        fString = str.toString(); 
        fData.add(fString); 

        tableModel2.addRow(new String[] { fString }); 
        return fData; 
       } 

       else if (pathName.endsWith(".tiff")) { 
         int pathLength = pathName.length(); 
         str = new StringBuilder(filePaths.get(i)); 
         str.insert(pathLength - 5, "_Data"); 
         fString = str.toString(); 
         fData.add(fString); 

         tableModel2.addRow(new String[] { fString }); 
         return fData; 
       } 

      } 
      tableModel2.fireTableDataChanged(); 
     } 
     return null;   
    } 

    ` 

答えて

1

一度交換するとすぐにgetTableData()から返品されているようです。代わりに、すべてのファイルパスを反復処理した後にのみ戻ってください。

ループ内のreturnステートメントを削除し、末尾のreturn nullreturn fDataに置き換えます。

+1

ありがとう、ありがとう!リターンステートメントの私の理解はオフにしなければならない、私は各反復の結果は、それが次の反復の前に "格納"することができるように返さなければならないと思ったが、それは論理が間違っているようだ。 – Rosie

関連する問題