2015-09-03 178 views
2

我试图将文本文件中的数据保存到二维数组列表中。这里是我的二维数组列表二维阵列列表java

private ArrayList<ArrayList<String>> students = new ArrayList<ArrayList<String>>(); 

,这里是我的ArrayList

private ArrayList<String> a = new ArrayList<String>(); 

,在这里我想给我补名单与数据

 public void addStudent(String student){ 
      a.add(student); 
     } 
     public void addToList(){ 
       students.add(a); // 


       System.out.println("TEST1 " + students); 

       a.clear(); 

       System.out.println("TEST2 " + students); 
      } 

这里是我的阅读方法

public void read(){ 

     BufferedReader br = null; 
     try { 
      br = new BufferedReader(new FileReader("C:\\Users\\SuperUser\\IdeaProjects\\Test\\src\\data.txt")); 
      String line = ""; 
      int num = 0; 
      while((line = br.readLine()) != null){ 
       String [] tokens = line.split("\\s+"); 
       if(tokens.length == 2){ 
        if(num != 0){ 
         a.addToList(); 
        } 
        num++; 
       }else{ 
        a.addStudent(tokens[0]); 
       } 
      } 
      // a.addToList(); 
      br.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

这里是我的outp ut

TEST1 [[Antanas, Kazys, Petras, Sonata]] 
TEST2 [[]] 
TEST1 [[Jonas, Martynas, Arturas, Vacys, Robertas], [Jonas, Martynas, Arturas, Vacys, Robertas]] 
TEST2 [[], []] 
TEST1 [[Mykolas, Aldona, Asta, Viktoras, Arturas, Vytas], [Mykolas, Aldona, Asta, Viktoras, Arturas, Vytas], [Mykolas, Aldona, Asta, Viktoras, Arturas, Vytas]] 
TEST2 [[], [], []] 

那么,为什么清除我的清单a.clear()它影响我的二维阵列?为什么我失去了我的数据?

编辑 阿贝RESINA

Information 4 
Antanas 1 6.95 
Kazys 2 8.65 
Petras 2 7.01 
Sonata 3 9.13 
Economy 5 
Jonas 1 6.95 
Martynas 3 9.13 
Arturas 2 7.01 
Vacys 2 8.65 
Robertas 3 6.43 
Robotics 6 
Mykolas 1 6.95 
Aldona 3 9.13 
Asta 2 7.01 
Viktoras 2 8.65 
Arturas 5 8.32 
Vytas 3 7.85 
Literature 4 
Jonas 1 6.95 
Zigmas 3 9.13 
Arturas 2 7.01 
Simas 3 6.43 
+0

你能提供输入文件吗?并且您的代码不完整:例如在'read'方法中使用的变量'a'不是你声明为'ArrayList <>()'的那个'... –

+0

那是因为我所有的列表都在内部类中。 – David

回答

4

什么情况是,您要添加的相同ArrayList参考你的 “2D ArrayList”。

也许你可以在每次想添加新学生时尝试制作一份ArrayList的副本。

或者你可以在每次你想添加新学生时声明一个新的ArrayList。