0

私のプログラムでは、テキスト ファイルを読み取り、多くの配列リスト (ユーザーが探しているものに応じて 8 つまたは 9 つ) を作成して、平均、ピーク、谷を見つけるために操作します。ファイルは次の形式で設定されます。

ID 契約日
始値 高値 安値 終値 出来高 ID1 契約 1 日付 1 始値 1 高値 1 安値 1 終値 1 出来高 1 ... など

これを行うことで、それらを配列リストに分離します

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));

このテキスト ファイルを整理するためのより効果的または効率的な方法はありますか。それは非常に大きくなり、数学をより複雑にしようとすると(配列リストの一部のみを使用して特定の期間の平均などを見つけるなど)、コードを機能させるのに深刻な問題が発生しています。

この答えには正解がありません。スタック オーバーフローのコミュニティが提供するものを探しているだけです。

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 に答える