0

在我的程序中,我正在读取一个文本文件并制作许多数组列表(8 个或 9 个,具体取决于用户正在寻找的内容),这些列表将被操纵以查找平均值、峰值和谷值。该文件设置为以下格式:

ID 合约日期 Open High Low Close Volume
ID1 Contract1 Date1 Open1 High1 Low1 Close1 Volume1 ... 以此类推

我通过这样做将它们分成数组列表

ArrayList<Double> list = new ArrayList<Double>();

    while (scanDaily.hasNext())
    { //while
        double value = scanDaily.nextDouble();
        DecimalFormat df = new DecimalFormat("#.#####");
        df.format(value);
        list.add(value);
    }  //while

    for (int c1 = 0; c1 < list.size(); c1++)
    { //for
        counter1++;
        if (counter1 % rows ==1)
            ID.add(list.get(c1));
        else if (counter1 % rows ==2)
            Contract.add(list.get(c1));
        else if (counter1 % rows == 3)
            Date.add(list.get(c1));
        else if (counter1 % rows == 4)
            Open.add(list.get(c1));
        else if (counter1 % rows == 5)
            High.add(list.get(c1));
        else if (counter1 % rows == 6)
            Low.add(list.get(c1));
        else if (counter1 % rows == 7)
            Close.add(list.get(c1));
        else if (counter1 % rows == 8)
            Volume.add(list.get(c1));

有没有更有效或更高效的方式来组织这个文本文件。它变得非常大,当我试图让我的数学变得更复杂时(比如只使用部分数组列表来查找某些时间段的平均值等),我在让我的代码正常工作时遇到了严重的问题。

这个答案没有正确答案,我只是想看看 Stack Overflow 社区能提供什么。

4

1 回答 1

1

我的建议是使用面向对象的方法,即创建一个代表您的文件数据的类,然后将该类的对象存储在针对 ID 属性的哈希图中。它将帮助您在可读性和简单性方面大量组织您的代码。

这就是你的记录类的样子,我不知道你文件中的不同属性,所以我认为它们中的大部分都是字符串。您可以根据需要更改类型:

class Record {

    String ID;

    String contract;

    Date date;

    String open;

    String high;

    String close;

    List<String> volumes;

    public String getID() {
        return ID;
    }

    public void setID(String iD) {
        ID = iD;
    }

    public String getContract() {
        return contract;
    }

    public void setContract(String contract) {
        this.contract = contract;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public String getOpen() {
        return open;
    }

    public void setOpen(String open) {
        this.open = open;
    }

    public String getHigh() {
        return high;
    }

    public void setHigh(String high) {
        this.high = high;
    }

    public String getClose() {
        return close;
    }

    public void setClose(String close) {
        this.close = close;
    }

    public List<String> getVolumes() {
        return volumes;
    }

    public void setVolumes(List<String> volumes) {
        this.volumes = volumes;
    }


}

像这样定义你的地图:

Map<String,Record> recordsMap = new HashMap<String,Record>();

使用从每一行读取的适当属性值创建 Record 实例,然后根据需要根据 ID 或其他键存储 Record。

于 2013-06-11T13:15:58.940 回答