2017-12-23 21 views
0

文字列をArrayListに追加する際に問題があります。私の目標は、forループを使って配列のリストを作成することです。 ArrayListのが唯一の1の代わりに、ここで4の値を持っているので、それは、以前のデータを消去し、常にいるようだし、それが新しいデータで置き換え、それをループしているが、それぞれの時間は、完全なコードarraylistに文字列を追加する<String>

public class SerialDemo { 

    private static File f; 
    private static Save obj1; 
    private static Save obj; 

    private static int number = 4; 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     try { 
      //getData("newFile.txt"); 
      for(int i = 0; i < number;i++) { 
       obj = new Save(); 
       obj.arrayLocationX.add(String.valueOf(10 * i)); 
       obj.arrayLocationY.add(String.valueOf(20 * i)); 
       obj.arrayTitle.add(String.valueOf(30 * i)); 
       obj.arrayDescription.add(String.valueOf(40 * i)); 
       obj.arrayNumber.add(""+i); 
      } 

      for(String x:obj.arrayLocationX) { 
       System.out.println(obj.arrayLocationX); 
      } 

      //setData("newFile.txt"); 
      /*getData("newFile.txt"); 

      for(int i = 0; i < obj.arrayLocationX.size(); i++) { 
       System.out.println("Value of Desc"+obj1.arrayNumber); 
       System.out.println("Value of locX"+obj1.arrayLocationX.get(i)); 
       System.out.println("Value of locY"+obj1.arrayLocationY.get(i)); 
       System.out.println("Value of Tit"+obj1.arrayTitle.get(i)); 
       System.out.println("Value of Desc"+obj1.arrayDescription.get(i)); 
       System.out.println(" "); 
       System.out.println(obj.arrayDescription.size()); 
      }*/ 
     }catch(Exception e) { 

     } 

    } 

    private static void setData(String fileName) { 
     // set the object or data 
     try { 
      f = new File(fileName); 
      FileOutputStream fps; 
      fps = new FileOutputStream(f); 
      ObjectOutputStream dos = new ObjectOutputStream(fps); 
      dos.writeObject(obj); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }catch(IOException e) { 

     } 
    } 
    private static void getData(String fileName) { 
     // get the object or data 
     try { 
      f = new File(fileName); 
      FileInputStream fin = new FileInputStream(f); 
      ObjectInputStream Oin = new ObjectInputStream(fin); 
      obj1 = (Save) Oin.readObject(); 
     }catch(FileNotFoundException e) { 

     }catch(IOException e) { 

     }catch(ClassNotFoundException e) { 

     } 
    } 

} 

class Save implements Serializable { 
    ArrayList<String> arrayNumber = new ArrayList<String>(); 
    ArrayList<String> arrayLocationX = new ArrayList<String>(); 
    ArrayList<String> arrayLocationY = new ArrayList<String>(); 
    ArrayList<String> arrayTitle = new ArrayList<String>(); 
    ArrayList<String> arrayDescription = new ArrayList<String>(); 
} 
+1

例外があるかどうかを確認してください。 – ThomasEdwin

+0

try {} catch {}を削除しましたが、結果は同じままです。 1 –

+0

ループの前に 'obj = new Save();'を移動してみてください – ThomasEdwin

答えて

4

新しいですobjはすべての反復で作成されるため、追加された文字列は失われます。ループの前にobj = new Save();を移動してみてください。

3
for(int i = 0; i < number;i++) { 
      obj = new Save(); 

obj新しいSaveとしてループが再び始まるたびにインスタンス化されます。これは、前のループからのすべての進捗が失われ、新しいSaveが挿入を受け取るものであることを意味します。ループの前のどこかで、objを1回作成するだけです。行の順序を入れ替えると、プログラムが動作するはずです。

obj = new Save(); 
for(int i = 0; i < number;i++) { 
+0

説明のおかげでありがとう、私は今それをよく理解しています。 –

関連する問題