2

ファイルの読み取りと書き込みを行いましたが、問題があります。ファイルの最後の行だけが表示される理由がわかりません。Person.txt から行を読み取る部分で、while ループを抜けたときに、行ごとに p.getName() を表示したいのですが、最後の行だけが表示されます。どうすればこれを修正できますか?

ここに私のコードがあります:

import java.io.*;
import java.util.*;
import java.util.ArrayList;

public class ListaHobby {

 String line="";
 Hobby h = new Hobby();
 Persoana p = new Persoana();
 BufferedWriter bw = null;
 ArrayList<Persoana> listOfPersons;
 ArrayList<Hobby> listOfHobbies;
  public void writeListaHobbies(){
    try{
      listOfPersons = new ArrayList<Persoana>();
      FileReader  file1 =new FileReader("Persoane.txt");


      listOfHobbies = new ArrayList<Hobby>();
      FileReader file2 = new FileReader("Hobby.txt");


      BufferedReader br1 = new BufferedReader(file1);
      BufferedReader br2 = new BufferedReader(file2);

      while((line1 = br1.readLine()) != null){

         if(!line1.trim().contains("ID")){
          String[] attributes = line1.split(";");// split it at every ";"

            //Person person = new Person();           // make a new person
            p.setNume(attributes[1]);
            p.setPrenume(attributes[2]);
            p.setDataNasterii(attributes[3]);
            p.setProfesie(attributes[4]);


             listOfPersons.add(p);
         }
      }

     System.out.println(p.getNume());
      while((line2 = br2.readLine()) != null){


          if(!line2.trim().contains("ID")){
            String[] attributes = line2.split(";");  // split it at every ";"

                      // make a new person
            h.setNume(attributes[1]);
            h.setDescriere(attributes[2]);
            h.setNrPers(attributes[3]);
            h.setElemNecesar(attributes[4]);

            listOfHobbies.add(h);

          }

      }
     System.out.println(h.getNume());

      FileWriter fw = new FileWriter("PersHobby.txt");
      bw = new BufferedWriter(fw);

     for(int i = 0;i < listOfPersons.size(); i++) {

        //for(int j = 0 ; j < listOfHobbies.size();j++) {

             if((p.getId())== (h.getId()))
                 p.addHobby(h);

             String s = p.getNume() + " " +p.getPrenume() +
                     ": " + h.getNume() + ", " + h.getNume();
             System.out.println(s);
             bw.write(s);
             bw.newLine();
     }
      bw.close();
    }
    catch(IOException ex){
        System.out.println("Error opening file.");
        System.exit(1);
    }
  }
}
4

3 に答える 3

0

同じ人をリストに追加し続けます。コメント行のコメントを外して、反復ごとに新しいオブジェクトを作成する必要があります。それが完了したら、クラス メンバー (p) を削除できます。これは、人物を ArrayList に格納するため、不要になったためです。

同じコメントが趣味のリストにも当てはまります。

  while((line1 = br1.readLine()) != null){

     if(!line1.trim().contains("ID")){
      String[] attributes = line1.split(";");// split it at every ";"

        Persoana p = new Persoana();  // <~~~ you need to create a new person for each line
        p.setNume(attributes[1]);
        p.setPrenume(attributes[2]);
        p.setDataNasterii(attributes[3]);
        p.setProfesie(attributes[4]);


         listOfPersons.add(p);
     }
  }
于 2012-05-02T15:42:06.823 に答える
0

Personとの単一インスタンスを使用しHobbyて、それぞれのリストに追加しています。代わりに、見つかった (一意の?) ID ごとに を作成しnew Personnew Hobbyそれらを使用してリストに追加します。

p = new Person();  
p.setXXX...  
...   

ホビーも同様。

h = new Hobby();
h.setXXX...   
...

これを行わない限り、最新の見つかったデータを同じリストに追加し、personオブジェクトhobbyをリストに追加するだけです。

于 2012-05-02T15:52:59.130 に答える