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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Q&A

解決済

1回答

2183閲覧

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

khr0404

総合スコア43

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

0グッド

0クリップ

投稿2016/04/25 06:28

###前提・実現したいこと
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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

投稿2016/04/25 07:47

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

khr0404

2016/04/26 06:08

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

2016/04/26 09:18

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問