![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
スケジュールのプログラムを作成していまして、1日分のオブジェクトをArrayListにいれて、さらに、1日分のArrayLisのオブジェクトを1ヶ月のArrayListにいれました。
そこで、1ヶ月のArrayListのオブジェクトから1日のArrayListのオブジェクトに分解して、表示したところに、最後の日にちの件数が表示されました。
1.ArrayListにオブジェクトをいれますと、うまく表示されます。
2.ArrayListにArrayListオブジェクトをいれまして、総件数を表示したら、1日から31日までのArrayListのsizeメソッドが最後の日にちが表示されます。よって1日から30日のArrayListに31日分のArrayListが上書きされているように思われます。
1と2の違いと原因をご教授下さい。
//arraylist作成1ヶ月分。
public ArrayList setMonth(int year,int month,int user_id){
-省略-
ArrayList monthList=null;
for(int count=1; count<=day; count++){
monthList=new ArrayList();
ArrayList dayList=new ArrayList();
dayList=setDay(year,month,count);
monthList.add(dayList);
}
for(int a=0; a<monthList.size(); a++){
ArrayList saa = (ArrayList)monthList.get(a);
int mm= saa.size();
System.out.println("mm:"+mm);
}
return monthList;
-省略-
}
//ArrayList作成1日分
public ArrayList setDay(int year,int month,int day){
ArrayList aList = new ArrayList();
-省略-
while(rs.next()){
Allday schAll=new Allday();
schAll.setSchedule_id(rs.getInt("schedule_id"));
schAll.setContents(rs.getString("contents"));
aList.add(schAll);
}
for(int b=0; b<aList.size(); b++){
int si= ((Allday)aList.get(b)).getSchedule_id();
String con=((Allday)aList.get(b)).getContents();
}
return aList;
-省略-
}
No.2ベストアンサー
- 回答日時:
こんばんは。
1:ArrayList monthList=null;
2:
3:for(int count=1; count<=day; count++){
4: monthList=new ArrayList();
5: ArrayList dayList=new ArrayList();
6: dayList=setDay(year,month,count);
7: monthList.add(dayList);
8:}
4行目はおかしくないですか?
これでは、forループが回るたびに新しいArrayListのインスタンスを作ってしまいませんか。
一回転目で1日目のデータを入れても、2回転目には、あたらしいArrayListができてしまい、さっきのArrayListは1日目のデータとともに、ガーベージコレクションの対象になって、消えていってしまいます。
それを31回繰り返し、結局、31日目のデータを入れた最後のリストが生き残っているように思います。
あと、5行目も結局6行目でsetDayメソッドから返ってくるArrayListのインスタンスを代入しているので、無駄ですよね。
ArrayList monthList = new ArrayList();
for(int count=1; count<=day; count++){
ArrayList dayList = setDay(year,month,count);
monthList.add(dayList);
}
こうするのが、正しいような気がするのですが・・・、
おはようございます。
うまく行きました。
ご指導を頂いてありがとうございます。
また、よろしくお願いいたします。
美咲 優花より
No.3
- 回答日時:
No2の方の回答でご理解されたかと思いますが
補足で
ArrayList monthList = new ArrayList();
//変数宣言を予め行っておく
ArrayList dayList;//←ここで宣言
for(int count=1; count<=day; count++){
//宣言した変数を使いまわす
dayList = setDay(year,month,count);
monthList.add(dayList);
}
こう、書く方が良かったんじゃないかと思います。
あっているか、自信はありませんが(滝汗
おはようございます。
うまく行きました。
ご指導を頂いてありがとうございます。
また、よろしくお願いいたします。
美咲 優花より
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
Java 初心者 int型の取り扱い方
-
ビープ音をなめらかに鳴らしたい
-
行の途中から読み込む方法
-
JAVAでCの関数ポインタのような...
-
SwingでJtableのヘッダ行が表示...
-
DataSet(DataTable)の使い方
-
intが負の時に投げる例外はあり...
-
JAVA エラー 式の開始が不正で...
-
C#で実行時にメソッドの返り値...
-
JFrameをフェードイン・フェー...
-
java 長さの異なる配列の代入
-
javaでcsvファイル読込時の改行...
-
JUnit4のアノテーションについて
-
javaでカレンダー作成
-
フィボナッチ数列 java
-
西暦 -> 年号、年号 -> 西暦の...
-
共有メモリについて
-
[JAVA]割り算のあまり・・・
-
コンパイラ通らない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
java spring でエラーが出て困...
-
式の型は配列型で int に解決済...
-
javaでcsvファイル読込時の改行...
-
SwingでJtableのヘッダ行が表示...
-
c# デリゲート関連の命名について
-
DataSet(DataTable)の使い方
-
C#で実行時にメソッドの返り値...
-
Javaで電卓を作りたい
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
メインが含まれていません
-
C++からC#のdllを参照する際、...
-
共有メモリについて
-
6桁の数字を重複なしでランダム...
-
javaのエラーの意味がわかりま...
-
Javaのファイル名チェックについて
-
デスクトップのアイコンの位置...
-
【C#】フォームをなめらかに移動
-
C#でバブルソート
おすすめ情報