java ด้านนอกในขณะที่ลูปไม่วนซ้ำ

ฉันเขียนโค้ดต่อไปนี้และลูป 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 แล้วหยุด อย่างไรก็ตาม ฉันต้องดำเนินการต่อและทำซ้ำขั้นตอนเดิมสำหรับบรรทัดถัดไปของไฟล์แรก ดังนั้น ฉันคิดว่ามีปัญหาบางอย่างที่เกี่ยวข้องกับการวนรอบนอกในขณะที่ฉัน แต่ฉันไม่พบปัญหาคืออะไร :| ใครสามารถช่วยฉันหน่อยได้ไหม? ขอบคุณ


person mOna    schedule 08.12.2015    source แหล่งที่มา
comment
ฉันอยากจะบอกว่ามันวนซ้ำซ้ำแล้วซ้ำเล่าและ for loop ของคุณไม่วนซ้ำอีกต่อไปเนื่องจากคุณอ่าน itemfeatures และ itemfeatures.readLine() ส่งคืนค่า null แล้วเนื่องจากคุณอยู่ที่ส่วนท้ายของไฟล์แล้ว   -  person SomeJavaGuy    schedule 08.12.2015
comment
คุณสามารถใส่ค่าเริ่มต้นของ itemFeatures ไว้ในลูปด้านนอก หรือคุณสามารถอ่านเนื้อหาของไฟล์ที่สองหนึ่งครั้งและแคชข้อมูลที่คุณต้องการได้   -  person khelwood    schedule 08.12.2015


คำตอบ (2)


itemfeatures จะต้องเริ่มต้นก่อน for loop ทุกครั้งที่คุณอ่านจาก 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