3

SO エキスパートの皆様、こんにちは。

ステップ 1 .以下のコードに示すように、タイトル、ジャンル、リードアクター、それぞれのゲッターとセッターを持つクラス DVDInfo を作成しました。

質問 : 「スラッシュ /」を含む dvdInfo.txt ファイルから Arraylist を生成する必要があり、目的の出力には「スラッシュ /」のない arrayList が含まれている必要があります。

------------------------------------
       dvdInfo.txt file
------------------------------------

Donnie Darko/sci-fi/Gyllenhall, Jake
Raiders of the Lost Ark/action/Ford, Harrison
2001/sc-fi/??
Caddy Shack/comedy/Murray, Bill
Star Wars/sc-fi/Ford, Harrison
Lost in Translation/comedy/Murray, Bill
Patriot Games/action/Ford, Harrison

-------------------------------------    


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

    class DVDInfo{
      private String title;
      private String genre;
      private String leadActor;

    DVDInfo(String t,String g,String a){
       this.title = t;
       this.genre =g;
       this.leadActor=a;
   }

   public String getTitle() {
     return title;
   }

   public void setTitle(String title) {
     this.title = title;
   }

   public String getGenre() {
      return genre;
   }

   public void setGenre(String genre) {
      this.genre = genre;
   }

   public String getLeadActor() {
    return leadActor;
   }

   public void setLeadActor(String leadActor) {
     this.leadActor = leadActor;
   }

   @Override
   public String toString() {
     return "DVDInfo [title=" + title + ", genre=" + genre + ", leadActor="
            + leadActor + "]";
   }

}

public class TestDVD {
    /*
     * //access dvdInfo.txt file and populate the arrayList by removing forward slash.
     */
    public static void populateList() throws Exception {      
      BufferedReader br = new BufferedReader(new FileReader(new File("C:\\src\\dvdInfo.txt")));
      //read each line of dvdInfo.txt below
      String line=br.readLine();
      while(line !=null) {
          DVDInfo = new DVDInfo(t,g,a);
          // Step 1.Wanted to create a DVDInfo Instance for each line of data we read in from dvdInfo.txt file.//failed to do so
          // Step 2.for each DVDInfo Instance ,we need to parse the line of data and populate DVDInfo's 3 instance variables --no clue.
          // Step 3.Finally put all DVDInfo instances into the ArrayList--- i dont know how to proceed(no clue)       
      } 
    }


    public static void main(String[] args) {
        ArrayList<DVDInfo>  dvdList= new ArrayList<DVDInfo>();
        try{
            populateList();
        }catch(Exception e){
            System.out.println("Exception caught"+e.getMessage());
        }
        System.out.println(dvdList);
    }

}


  ------------------------------------------------------
  output of populateList should be without forward slash
  ------------------------------------------------------    

  Donnie Darko sci-fi Gyllenhall, Jake
  Raiders of the Lost Ark action Ford, Harrison
  2001 sc-fi ??
  Caddy Shack comedy Murray, Bill
  Star Wars sc-fi Ford, Harrison
  Lost in Translation comedy Murray, Bill
  Patriot Games action Ford, Harrison

Java バージョン 1.5 の PopulateList メソッドのコードを教えてください。

おかげでうまくいきました!!! すべての SO エキスパートに乾杯。

4

3 に答える 3

5

populateList()

//Signature of method changed to add List<DVDInfo> as a parameter    

    public static void populateList(List<DVDInfo> info) throws Exception {
            BufferedReader br = new BufferedReader(new FileReader(new File("C:\\src\\dvdInfo.txt")));
            //read each line of dvdInfo.txt below
             String line = null;
             while ((line = br.readLine()) != null) { //check line in loop
                String[] tokens = line.split("/");
                DVDInfo infoItem = new DVDInfo(tokens[0],tokens[1],tokens[2]);
                info.add(infoItem);      
            } 
          }

主要()

//dvdList is now passed to the method.
public static void main(String[] args) {
    ArrayList<DVDInfo>  dvdList= new ArrayList<DVDInfo>();
    try{
        populateList(dvdList);
    }catch(Exception e){
        System.out.println("Exception caught"+e.getMessage());
    }
    System.out.println(dvdList);
}

無限ループの問題

コードのこのセクションでは、無限ループが発生します。

      String line=br.readLine();
      while(line !=null) {
          DVDInfo = new DVDInfo(t,g,a);

      } 

これは、バッファから 1 行が読み取られ、その行が null でない間にループが実行されるために発生します。新しい行がバッファーから読み取られることはないため、行が null になることはなく、無限ループが作成されます。これは、次を使用して修正できます。

            String line = null;
            while ((line = br.readLine()) != null) { //check line in loop

            } 

このループ構造は、バッファからの行を `Strin に割り当てます。

于 2013-03-18T09:40:38.077 に答える
2

データを入力し、リストをメイン関数に戻す必要があります。

 public static ArrayList<DVDInfo> populateList() throws Exception { 
         ArrayList<DVDInfo>  dvdList= new ArrayList<DVDInfo>();     
              BufferedReader br = new BufferedReader(new FileReader(new File("C:\\src\\dvdInfo.txt")));
              //read each line of dvdInfo.txt below
              String line=br.readLine();


            while (( String line = br.readLine()) != null) {
                //for each line use 
                String[] tokens = line.split("/");
                DVDInfo dvdInfo = new DVDInfo(tokens[0],tokens[1],tokens[2]); //step 1 & 2
                dvdList.add(dvdInfo );//step 3
            } 
          return dvdList;
       }
于 2013-03-18T09:52:35.450 に答える
2

/の行を分割すると、目的の値が得られるはずです。line.split( "/");を試してください。

于 2013-03-18T09:36:18.887 に答える