java - 家庭作业帮助;从多个文件读取到 vector/数组中

标签 java vector iteration textinput

好吧,我的任务是从 2 个单独的文件中读入。第一个文件读取“HallOfFameMember”,然后应存储在 vector 中。

第二个应该读入然后存储到 HallOfFame 数组中

HallOfFameMember 对象有 10 个字段。依次为名字、姓氏、死者、出生月份、出生日期、出生年份、总收入、出场年数、入选年份、名人堂 ID

出生的日/月/年都将进入一个单独的类来创建出生日期。然后,出生日期将在 HallOfFameMember 中设置。记录的字段将由不同数量的空格和/或制表符(空白)分隔。

从此文件读取记录后,调用 HallOfFameMember 的 10 个参数构造函数,使用记录中的字段作为构造函数调用中的参数。将此新的 HallOfFameMember 对象添加到 tempHallOfFameMemberVec。

HallOfFame 对象有 5 个字段。按 HallOfFameId、城市、costToVisit、numberOfVisitorsPerYear 和名称的顺序排列。

从此文件中读取记录后,使用从文件中的行获取的参数调用 HallOfFame 类的 5-arg 构造函数。将这个新的 HallOfFame 对象添加到 tempHallOfFameArr。

这一切都可以通过命令行完成。

我知道我当前的代码将无法工作,我只是想找出一些方法来做到这一点。 vector 和 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(){

    }


}

最佳答案

一些提示:

我不想为您做作业,但我想不出一个快速教程来指导您完全涵盖您正在做的事情。

您使用 .split 的方法是正确的,但您的分隔符表达式不适用于多个空格/制表符。试试这个:

String delims = "\\s+";

这将在一个或多个空白字符的任何连续序列上分解您的字符串。

此外,您需要将拆分移到 while 循环中,以及创建每个 HallOfFameMember 对象。在循环的每次迭代中,您想要:

  1. 拆分从文件中读取的行以创建表示一条记录的值的字符串数组。
  2. 使用字符串数组中的值创建一个新的 HallOfFameMember。 (tempHallOfFameArr[0] 代表名字,tempHallOfFameArr[1] 代表姓氏,等等)
  3. 将您创建的新 HallOfFameMember 添加到 vector 中

如果您想了解有关这些步骤的更多详细信息,我很乐意详细说明。

关于java - 家庭作业帮助;从多个文件读取到 vector/数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7781156/

相关文章:

c++ - 这两种输入 vector 元素的方法之间的区别?哪个更有效率?

c++ - 将指针分配给 vector

c++ - vector push_back 显示荒谬的结果

rust - 如何将枚举的向量转换为该枚举的特定变体的内部值的向量

function - 按要求次数执行功能

powershell - 为什么我的 foreach 变量在每次迭代后没有进入 PowerShell 中的输出?

数字列表的 Java Regex 验证

java - 媒体播放器 noSound OSX

java - 我如何设置满足上述要求的条件

java - 试用资源和 System.in