Java внешний цикл while не повторяется

Я написал следующий код, и внутренний цикл for работает нормально, но внешний цикл не повторяется. Вот мой код:

BufferedReader userfeatures = new BufferedReader(new FileReader("userFeatureVectorsTest.csv"));
BufferedReader itemfeatures = new BufferedReader(new FileReader("ItemFeatureVectorsTest.csv"));         

while ((Uline = userfeatures.readLine()) != null) 
{
    for (String Iline = itemfeatures.readLine(); Iline != null; Iline = itemfeatures.readLine()) 
    {           
         System.out.println(intersect(Uline, Iline).size()); 
         System.out.println(union(Uline, Iline).size());  
    }
}
userfeatures.close();
itemfeatures.close();

}

Он находит пересечение и объединение first line of the first file с every line of the 2nd file, а затем останавливается. Однако мне нужно продолжить и повторить ту же процедуру для следующих строк первого файла. Итак, я думаю, что есть некоторые проблемы, связанные с моим внешним циклом while, но я не смог найти, в чем проблема: | Может ли кто-нибудь помочь мне, пожалуйста? Спасибо


person mOna    schedule 08.12.2015    source источник
comment
я бы скорее сказал, что он зацикливается снова и снова, и ваш цикл for больше не зацикливается, так как вы уже прочитали itemfeatures, а itemfeatures.readLine() возвращает null, поскольку вы уже находитесь в конце файла.   -  person SomeJavaGuy    schedule 08.12.2015
comment
Вы можете поместить инициализацию itemFeatures во внешний цикл. Или вы можете прочитать содержимое второго файла один раз и кэшировать нужную информацию.   -  person khelwood    schedule 08.12.2015


Ответы (2)


itemfeatures нужно инициализировать непосредственно перед циклом for каждый раз, когда вы читаете из userfeatures. В противном случае ваши характеристики элементов будут полностью прочитаны после первой итерации.

person leonz    schedule 08.12.2015

Как уже было сказано, ваш цикл for полностью считывает второй файл, поэтому вам приходится каждый раз читать его заново.

Поэтому заново создайте его Reader перед циклом for, а также закройте его после цикла for.

Проще говоря, каждый раз, когда вы читаете одну строку из Файла 1, вы должны открывать, читать полностью и закрывать Файл 2:

BufferedReader userfeatures = new BufferedReader(new FileReader("userFeatureVectorsTest.csv"));


while ((Uline = userfeatures.readLine()) != null) 
{

    BufferedReader itemfeatures = new BufferedReader(new FileReader("ItemFeatureVectorsTest.csv")); 

    for (String Iline = itemfeatures.readLine(); Iline != null; Iline = itemfeatures.readLine()) 
    {           
         System.out.println(intersect(Uline, Iline).size()); 
         System.out.println(union(Uline, Iline).size());  
    }

   itemfeatures.close();
}
userfeatures.close();

}
person Arnaud    schedule 08.12.2015
comment
Я только что принял ответ, но большое спасибо за время и усилия :) - person mOna; 08.12.2015