javaのTreeMapとArrayListについての質問です
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,474
前提・実現したいこと
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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
SalesListのlistはprivateなので、sl.listのように参照出来ません。
SalesListからSalesの情報を取れるようにしたのがgetSalesというメソッドのはずです。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.34%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/04/26 15:08
間違っていたので拡張for文で対応しました。
2016/04/26 18:18