Java luar while loop tidak berulang

Saya menulis kode berikut dan loop for bagian dalam berfungsi dengan baik, tetapi loop luar tidak berulang. Ini kode saya:

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();

}

Ia menemukan perpotongan dan penyatuan first line of the first file dengan every line of the 2nd file dan kemudian berhenti. Namun, saya perlu melanjutkan dan mengulangi prosedur yang sama untuk baris berikutnya dari file pertama. Jadi, menurut saya ada beberapa masalah terkait dengan loop while luar saya, tetapi saya tidak dapat menemukan apa masalahnya :| Bisakah seseorang membantu saya? Terima kasih


person mOna    schedule 08.12.2015    source sumber
comment
Saya lebih suka mengatakan bahwa itu berulang-ulang dan loop for Anda tidak berulang lagi karena Anda sudah membaca itemfeatures dan itemfeatures.readLine() mengembalikan null karena Anda sudah berada di akhir file.   -  person SomeJavaGuy    schedule 08.12.2015
comment
Anda dapat memasukkan inisialisasi itemFeatures ke dalam loop luar. Atau Anda dapat membaca konten file kedua satu kali dan menyimpan informasi yang Anda perlukan dalam cache.   -  person khelwood    schedule 08.12.2015


Jawaban (2)


fitur item harus diinisialisasi tepat sebelum loop for setiap kali Anda membaca dari fitur pengguna. Jika tidak, fitur item Anda akan terbaca sepenuhnya setelah iterasi pertama

person leonz    schedule 08.12.2015

Seperti yang dinyatakan orang, loop for Anda membaca seluruh file kedua, jadi Anda harus membacanya lagi setiap kali.

Jadi buat ulang Pembacanya sebelum perulangan for, dan tutup juga setelah perulangan for.

Sederhananya, setiap kali Anda membaca satu baris dari File 1, Anda harus membuka, membaca seluruhnya, dan menutup File 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
Saya baru saja menerima jawabannya, tapi terima kasih banyak atas waktu dan tenaganya :) - person mOna; 08.12.2015