2015-07-09 2 views
1

Привет всем, у меня сейчас есть проблемы с одним из моих методов на данный момент.Устранение неполадок в ArrayList из ArrayLists

ArrayList<ArrayList<UnigramLanguageModel>> arrayListReadCategoriesDC() throws IOException{ 
    BufferedReader br = null; 
    String line=""; 

    ArrayList<ArrayList<UnigramLanguageModel>> dcx = new ArrayList<ArrayList<UnigramLanguageModel>>(); 
    ArrayList<UnigramLanguageModel> ulm = new ArrayList<UnigramLanguageModel>(); 

    for(int i=0;i<7;i++){ 

     br = new BufferedReader(new FileReader("C:\\Users\\mccluskm\\Desktop\\trainingSet\\"+dcP[i]+"\\"+dc[i]+".txt")); 
     while ((line = br.readLine()) != null){ 
      String[] split = line.split(":"); 
      ulm.add(new UnigramLanguageModel(split[0],Integer.parseInt(split[1]),true)); 
     } 
     //System.out.println("Adding stage: "+ulm.size()); 
     dcx.add(ulm); 
     //System.out.println("From within nested ArrayList: "+dcx.get(i).size()); 
     ulm.clear(); 
    } 
    br.close(); 
    return dcx; 
} 

Это мой метод, в котором я читал из разных файлов (которые представляют разные категории). Каждая категория получает свой собственный ArrayList, а затем я хочу, чтобы вернуть ArrayList>

Изнутри основной метод, который я называю это так:

UnigramLanguageModel ulm = new UnigramLanguageModel(); 
ArrayList<ArrayList<UnigramLanguageModel>> dc =ulm.arrayListReadCategoriesDC(); 

Он возвращает пустую в ArrayList, проведение 7 пустых ArrayLists и я не знаю, почему? Если бы кто-нибудь мог помочь, я бы очень признателен!

+0

'while ((line = br.readLine())! = Null) {String [] split = line.split (": "); ulm.add (новый UnigramLanguageModel (split [0], Integer.parseInt (split [1]), true)); } 'нужно проверить эту часть кода. Убедитесь, что основной файл .txt правильно распределяется с помощью: seperator. Семь arraylists добавлены в другой arraylist из-за 'dcx.add (ulm);' –

+0

Я проверил, что файл читается правильно, и отдельные элементы добавляются в объект правильно. Yeh Мне просто интересно, почему он добавляет пустые ArrayLists, несмотря на то, что я их заселяю? –

ответ

1

У меня возникла ваша проблема. Пожалуйста, удалите ulm.clear(); звонок из вашего кода. Это решит вашу проблему.

Morover объявить что-то вроде ниже, не хорошо приближаясь

ArrayList<UnigramLanguageModel> ulm = new ArrayList<UnigramLanguageModel>(); 

Попробуйте вместо below--

List<UnigramLanguageModel> ulm = new ArrayList<UnigramLanguageModel>(); 
+0

Спасибо, это исправило мою ошибку –

1

Проблема, кажется, вы вставляете ту же ссылку в верхнем списке массива всегда , Вместо того, чтобы использовать ulm.clear, создайте новый объект ulm в цикле. Это должно решить проблему.

Смежные вопросы