2016-06-20 33 views
0

我想從一個表中使用字符串值的ArrayList,基於字符串是否以「.tif」或「.tiff」結尾來修改字符串,然後將結果字符串轉移到新表中。但是,當我調用這個方法時,新表只接收第一個修改過的字符串。我不確定我的邏輯有什麼問題,原始表的第一個元素將被檢查以確定它是否滿足條件(以「.tif」或「.tiff」結尾),然後從那個字符串開始修改後,添加到ArrayList fData中,然後迭代到下一個表值。我不明白爲什麼該方法不會返回fData中包含的多個元素?Java - 在ArrayList中的循環<String>方法只返回一個元素

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 fData代替return null

+1

哦,我明白了,非常感謝!我對返回語句的理解必須是關閉的,我認爲每次迭代的結果必須返回,以便在下一次迭代之前可以「存儲」它,但這似乎是錯誤的邏輯。 – Rosie