質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.34%

javaのTreeMapとArrayListについての質問です

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,474

khr0404

score 43

前提・実現したいこと

ArrayList
TreeMap
Calendar
を用いて月間、週間の売上げの集計ができるプログラムをつくりたいです。

TreeMapを使ってAggDataListのListからtreemapへ値を格納しiteratorで取り出すプログラミングだと思うのですがソースの書き方が判らなくつまづいています。
ご助言宜しくお願いします。

月別集計を行うためのクラス

import java.util.ArrayList;
import java.util.Calendar;
import java.util.TreeMap;

public class MonthlyAggList implements AggListIF {

    private final AggDataList list = new AggDataList();

    public MonthlyAggList() {

        list.setListName( "月別集計" );
    }

    @Override
    public void makeList( SalesList sl ) {

        TreeMap<String, Integer> treemap = new TreeMap();
        ArrayList<AggData> al = new ArrayList();

        for ( int i = 0; i < sl.size(); ++i ) {
            int goukei = sl.list.get(i).getSales();
            int sales = sl.list.getSales( i ).getSales();

            Calendar calendar = Calendar.getInstance();
            int year = calendar.get( Calendar.YEAR );
            int month = calendar.get( Calendar.MONTH) ;
            int day = calendar.get( Calendar.DATE);
            int sales = 0 ;

           この部分がわかりません 

        }
    }

    @Override
    public AggDataList getList() {

        return this.list;
    }

    @Override
    public int size() {

        return this.list.size();
    }
}

週別集計を行うためのクラス

public class WeeklyAggList implements AggListIF {

    private final AggDataList list = new AggDataList();

    public WeeklyAggList() {

        list.setListName( "週別集計" );
    }

    @Override
    public void makeList( SalesList sl ) {

    }

この部分がわかりません

    @Override
    public AggDataList getList() {

        return this.list;

    }

    @Override
    public int size() {

        return this.list.size();
    }
}

集計したデータをまとめるクラス

import java.util.List;

public class AggDataList {

    private List<AggData> list;

    private String listName;

    public void setList( List<AggData> list ) {

        this.list = list;
    }

    public AggData getData( int i ) {

        return this.list.get( i );

    }

    public int size() {

        return this.list.size();

    }

    public String getListName() {

        return this.listName;

    }

    public void setListName( String string ) {

        this.listName = string;
    }
}

集計したデータを扱うクラス

public class AggData {

    private String label;

    private int data;

    public int getData() {

        return this.data;
    }

    public String getLabel() {

        return this.label;
    }

    public void setData( int i ) {

        this.data = i;
    }

    public void setLAbel( String string ) {

        this.label = string;
    }
}

日々の売上げを管理するクラス

import java.util.Calendar;

public class Sales {

    private Calendar date;

    private int sales;

    public Sales( int year, int month, int day, int sales ) {

        this.date = Calendar.getInstance();
        date.set( year, month - 1, day );
        this.sales = sales;
    }

    public Calendar getDate() {

        return this.date;

    }

    public int getSales() {

        return this.sales;
    }

    public void setDate( Calendar calender ) {

        this.date = calender;
    }

    public void setSales( int i ) {

        this.sales = i;

    }
}

売上げデータをまとめるクラス

import java.util.ArrayList;
import java.util.List;

public class SalesList {

    private final List<Sales> list = new ArrayList<Sales>();

    public void addSales( Sales s ) {

        this.list.add( s );

    }

    public Sales getSales( int i ) {

        return this.list.get( i );

    }

    public int size() {

        return this.list.size();
    }

}

実行用クラス

public class SalesAggExamMain {

    public static void main( String[] args ) {

        SalesList list = new SalesList();

        list.addSales( new Sales( 2004, 1, 1, 25000 ) );
        list.addSales( new Sales( 2004, 1, 6, 42000 ) );
        list.addSales( new Sales( 2004, 1, 12, 12000 ) );
        list.addSales( new Sales( 2004, 1, 18, 55000 ) );
        list.addSales( new Sales( 2004, 1, 24, 62000 ) );
        list.addSales( new Sales( 2004, 1, 30, 19000 ) );
        list.addSales( new Sales( 2004, 2, 4, 83000 ) );
        list.addSales( new Sales( 2004, 2, 10, 48000 ) );
        list.addSales( new Sales( 2004, 10, 1, 66000 ) );
        list.addSales( new Sales( 2004, 10, 3, 16000 ) );
        list.addSales( new Sales( 2004, 10, 9, 92000 ) );
        list.addSales( new Sales( 2005, 1, 1, 33000 ) );

        makeAndDispAggList( list, new WeeklyAggList() );

        makeAndDispAggList( list, new MonthlyAggList() );

    }

    public static void makeAndDispAggList( SalesList salesList, AggListIF aggList ) {

        aggList.makeList( salesList );

        AggDataList result = aggList.getList();

        System.out.println( result.getListName() );

        for ( int i = 0; i < result.size(); i++ ) {
            AggData data = result.getData( i );
            System.out.println( data.getLabel() + " : : " + data.getData() );
        }
    }
}

各集計用クラスが実装するインターフェース

public interface AggListIF {

    void makeList( SalesList sl );

    AggDataList getList();

    int size();

}

補足情報(言語/FW/ツール等のバージョンなど)

java
eclipse

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

SalesListのlistはprivateなので、sl.listのように参照出来ません。
SalesListからSalesの情報を取れるようにしたのがgetSalesというメソッドのはずです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/26 15:08

    回答ありがとうございます。
    間違っていたので拡張for文で対応しました。

    キャンセル

  • 2016/04/26 18:18

    この場合メンバとしてListを持つのでなく、ArrayListを継承してクラスを作成するのが簡単ではないでしょうか?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る