2011-10-15 88 views
0

好吧,我的任務是從2個單獨的文件讀入。第一個文件讀入「HallOfFameMember」,然後存儲在一個向量中。家庭作業幫助;從多個文件讀入矢量/陣列

第二應該閱讀,然後被存儲到HallOfFame

的HallOfFameMember對象具有10個字段的數組。爲了名字,姓氏,已故,出生日期,出生日期,出生年份,累計年數,年份,年份感應,名人堂ID

出生的日/月/ 。然後出生日期被設置在HallOfFameMember中。記錄的字段將被不同數量的空格和/或製表符(空格)分隔開。

從該文件中讀取一條記錄後,調用HallOfFameMember的10-arg構造函數,使用記錄中的字段作爲構造函數調用中的參數。將這個新的HallOfFameMember對象添加到tempHallOfFameMemberVec。

HallOfFame對象有5個字段。爲了hallOfFameId,city,costToVisit,numberOfVisitorsPerYear和name。

從該文件讀取一條記錄後,使用從文件中的行獲得的參數來調用HallOfFame類的5-arg構造函數。將這個新的HallOfFame對象添加到tempHallOfFameArr。

這一切都是從命令行完成的。

我知道我目前的代碼不起作用,我只是想弄清楚一些方法來做到這一點。對於我來說,矢量對於BufferedReader來說是全新的,我一直在嘗試使用javapractice.com上的示例以及其他幾個站點以供參考。我知道這將是我忽略/失蹤的一些小事情,當我弄明白時,我會有一個不知所措的時刻。

無論如何,我目前的問題是這樣的。

如何從具有「任意數量的空格/製表符」作爲分隔符的文件讀入。然後將其解析到相應類中的相應字段中?

給我的代碼是不是會有所幫助,如果你可以指向我的網站或鏈接,我可以讀取我的那個時刻,這將是偉大的。

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.util.Vector; 

public class HW4 { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 

     FileReader inputFileA = new FileReader(""); 
     FileReader inputFileB = new FileReader(""); 


     BufferedReader inputB = new BufferedReader(inputFileB); 

     Vector<HallOfFameMember> tempHallOfFameMemberVec = new Vector<HallOfFameMember>(); 


     try{ 
      BufferedReader inputA = new BufferedReader(inputFileA); 
      try { 
       String line = null; 

       while ((line = inputA.readLine()) != null){ 

       } 
      } 

     } 

     String newHallOfFameLine = inputB.toString(); 
     String delims = "[ \t]"; 
     HallOfFame[] tempHallOfFameArr = newHallOfFameLine.split(delims); 

     for (int i = 0; i < args.length; i += 5) { 
      tempHallOfFameArr[i/5].setHallOfFameId(Integer.parseInt(args[i])); 
      tempHallOfFameArr[i/5].setCity(args[i+1]); 
      tempHallOfFameArr[i/5].setCostToVisit(Integer.parseInt(args[i+2])); 
      tempHallOfFameArr[i/5].setNumberOfVisitorsPerYear(Integer.parseInt(args[i+3])); 
      tempHallOfFameArr[i/5].setName(args[i+4]); 

     } 




     } 

class HallOfFameMember { 

    private String firstName; 
    private String lastName; 
    private boolean deceased; 
    private int dateOfBirth; 
    private double totalEarned; 
    private int yearsPlayed; 
    private int yearInducted; 
    private int HallOfFameId; 

    public HallOfFameMember() { 
    } 

    public HallOfFameMember(String firstName, String lastName, 
      boolean deceased, int day, int month, int year, double totalEarned, 
      int yearsPlayed, int yearInducted, int hallOfFameId) { 
     super(); 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.deceased = deceased; 
     this.dateOfBirth = month + day + year; 
     this.totalEarned = totalEarned; 
     this.yearsPlayed = yearsPlayed; 
     this.yearInducted = yearInducted; 
     HallOfFameId = hallOfFameId; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public boolean isDeceased() { 
     return deceased; 
    } 

    public void setDeceased(boolean deceased) { 
     this.deceased = deceased; 
    } 

    public int getDateOfBirth() { 
     return dateOfBirth; 
    } 

    public void setDateOfBirth(int dateOfBirth) { 
     this.dateOfBirth = dateOfBirth; 
    } 

    public double getTotalEarned() { 
     return totalEarned; 
    } 

    public void setTotalEarned(double totalEarned) { 
     this.totalEarned = totalEarned; 
    } 

    public int getYearsPlayed() { 
     return yearsPlayed; 
    } 

    public void setYearsPlayed(int yearsPlayed) { 
     this.yearsPlayed = yearsPlayed; 
    } 

    public int getYearInducted() { 
     return yearInducted; 
    } 

    public void setYearInducted(int yearInducted) { 
     this.yearInducted = yearInducted; 
    } 

    public int getHallOfFameId() { 
     return HallOfFameId; 
    } 

    public void setHallOfFameId(int hallOfFameId) { 
     HallOfFameId = hallOfFameId; 
    } 

    public double averageYearlySalary(double averageYearlySalary) { 
     return averageYearlySalary = (totalEarned/yearsPlayed); 
    } 
} 

class Date { 

    private int month; 
    private int day; 
    private int year; 

    public Date(int month, int day, int year) { 
     super(); 
     this.month = month; 
     this.day = day; 
     this.year = year; 
    } 

    public int getMonth() { 
     return month; 
    } 

    public void setMonth(int month) { 
     this.month = month; 
    } 

    public int getDay() { 
     return day; 
    } 

    public void setDay(int day) { 
     this.day = day; 
    } 

    public int getYear() { 
     return year; 
    } 

    public void setYear(int year) { 
     this.year = year; 
    } 

} 

class HallOfFame { 
    private int hallOfFameId;// ID of the hall of fame 
    private String name;// Name of the hall of fame 
    private String city;// the city in which the hall of fame is located 
    private double costToVisit;// cost in dollars for a visitor to a hall of 
           // fame for 1 day 
    private int numberOfVisitorsPerYear; 
    private static final double maxCostToVisit = 37.50; 

    public HallOfFame() { 

    } 

    public HallOfFame(int hallOfFameId, String name, String city, 
      double costToVisit, int numberOfVisitorsPerYear) { 
     super(); 
     this.hallOfFameId = hallOfFameId; 
     this.name = name; 
     this.city = city; 
     this.costToVisit = costToVisit; 
     this.numberOfVisitorsPerYear = numberOfVisitorsPerYear; 
    } 

    public int getHallOfFameId() { 
     return hallOfFameId; 
    } 

    public void setHallOfFameId(int hallOfFameId) { 
     this.hallOfFameId = hallOfFameId; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getCity() { 
     return city; 
    } 

    public void setCity(String city) { 
     this.city = city; 
    } 

    public double getCostToVisit() { 
     if (costToVisit <= maxCostToVisit) { 
      return costToVisit; 
     } else 
      return maxCostToVisit; 
    } 

    public void setCostToVisit(double costToVisit) { 
     this.costToVisit = costToVisit; 
    } 

    public int getNumberOfVisitorsPerYear() { 
     return numberOfVisitorsPerYear; 
    } 

    public void setNumberOfVisitorsPerYear(int numberOfVisitorsPerYear) { 
     this.numberOfVisitorsPerYear = numberOfVisitorsPerYear; 
    } 

    public static double getMaxcosttovisit() { 
     return maxCostToVisit; 
    } 

    public double totalAnnualRevenue(double totalAnnualRevenue) { 
     totalAnnualRevenue += costToVisit * numberOfVisitorsPerYear; 
     return totalAnnualRevenue; 

    } 

} 


class ReportWriter{ 

    private Vector<HallOfFameMember> hallOfFameMemberVec; 
    private HallOfFame[] hallOfFameArr; 

    public ReportWriter() { 

    } 

    public Vector<HallOfFameMember> getHallOfFameMemberVec() { 
     return hallOfFameMemberVec; 
    } 

    public void setHallOfFameMemberVec(Vector<HallOfFameMember> hallOfFameMemberVec) { 
     this.hallOfFameMemberVec = hallOfFameMemberVec; 
    } 

    public HallOfFame[] getHallOfFameArr() { 
     return hallOfFameArr; 
    } 

    public void setHallOfFameArr(HallOfFame[] hallOfFameArr) { 
     this.hallOfFameArr = hallOfFameArr; 
    } 

    public void displayReports(){ 

    } 


} 

回答

1

一對夫婦提示:

我不想做你的功課你,但我想不出一個快速教程指向你覆蓋你在做什麼的。

您正處於正確的軌道上,使用.split,但您的分隔符表達式不適用於多個空格/製表符。試試這個:

String delims = "\\s+"; 

這將打破你的字符串在任何連續的一個或多個空白字符序列。

另外,您需要將分割移動到while循環中,以及創建每個HallOfFameMember對象。在循環的每次迭代要:

你從文件中讀取
  1. 分割線來創建一個表示爲一個記錄的值的字符串數組。
  2. 使用字符串數組中的值創建一個新的HallOfFameMember。 (tempHallOfFameArr [0]第一個名字,tempHallOfFameArr [1]爲姓等)
  3. 添加您創建到矢量

新HallOfFameMember如果您想對任何這些詳細步驟,我很樂意詳細說明。

+0

我只想評論一下,\\ s +是一個非常方便的正則表達式,可以讓您的編程生涯的其他部分記住 – Tanner

+0

謝謝我給了我一個機會。 – Zankorel