2016-06-20 8 views
0

Ich versuche, eine ArrayList der Zeichenfolge Werte aus einer Tabelle zu verwenden, ändern Sie die Zeichenfolgen basierend darauf, ob die Zeichenfolge mit ".tif" oder ".tiff" endet , dann übertragen Sie die resultierenden Zeichenfolgen in eine neue Tabelle. Wenn ich diese Methode aufrufen, empfängt die neue Tabelle jedoch nur die erste geänderte Zeichenfolge. Ich bin nicht sicher, was mit meiner Logik falsch ist, das erste Element der ursprünglichen Tabelle würde geprüft werden, um zu sehen, ob es eine Bedingung erfüllt (entweder endend in ".tif" oder ".tiff") und von dort aus wäre diese Zeichenfolge geändert, zur ArrayList fData hinzugefügt und dann zum nächsten Tabellenwert iteriert. Ich verstehe nicht, warum die Methode nicht mehr als ein Element in fData zurückgibt.Java - For-Schleife innerhalb ArrayList <String> Methode gibt nur ein Element zurück

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;   
    } 

    ` 

Antwort

1

Es scheint, dass Sie von getTableData() so schnell zurückkommen, wie Sie einen einzigen Ersatz tun. Stattdessen sollten Sie nur zurückkehren, nachdem Sie über jeden Dateipfad iteriert haben.

Entfernen Sie die return Anweisungen in den Schleifen und ersetzen Sie stattdessen return null am Ende mit return fData.

+1

Oh, ich sehe, vielen Dank! Mein Verständnis von Return-Anweisungen muss aus sein, ich dachte, dass das Ergebnis jeder Iteration zurückgegeben werden müsste, damit es vor der nächsten Iteration "gespeichert" werden konnte, aber das scheint eine fehlerhafte Logik zu sein. – Rosie