スケジュールのプログラムを作成していまして、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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでArrayListを使う為の「mscorlib.tlb」の参照設定について 3 2022/03/23 19:45
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- WordPress(ワードプレス) wordpressでphpを読み込みたい 1 2022/10/30 23:40
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
各店舗全て、リンゴは1個150円...
-
C++からC#のdllを参照する際、...
-
c# デリゲート関連の命名について
-
ビープ音をなめらかに鳴らしたい
-
Stringの100と100.0を同一とみ...
-
メインが含まれていません
-
数字のフォーマット(形式)を...
-
初心者ですが、今javaで簡単な...
-
行の途中から読み込む方法
-
前日日付の取得
-
6桁の数字を重複なしでランダム...
-
Java 初心者 int型の取り扱い方
-
sin曲線とcos曲線を描くプログ...
-
Javaでポインタ的なことはでき...
-
Sobelフィルタがうまく作れません…
-
初心者です。JScrollPane につ...
-
リサージュ図形
-
SwingでJtableのヘッダ行が表示...
-
「配列定数は、イニシャライザ...
-
Swing の実装でどうしてもエラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
式の型は配列型で int に解決済...
-
「配列定数は、イニシャライザ...
-
intが負の時に投げる例外はあり...
-
javaでカレンダー作成
-
メインが含まれていません
-
JAVA エラー 式の開始が不正で...
-
Javaで電卓を作りたい
-
javaでcsvファイル読込時の改行...
-
(Swing)JTextFieldを半角のみ入...
-
javaのエラーの意味がわかりま...
-
「WorkImage.getGraphics()」が...
-
初心者ですが、今javaで簡単な...
-
sin曲線とcos曲線を描くプログ...
-
java spring でエラーが出て困...
-
SwingでJtableのヘッダ行が表示...
-
Java 初心者 int型の取り扱い方
-
DataSet(DataTable)の使い方
-
JAVAでCの関数ポインタのような...
-
6桁の数字を重複なしでランダム...
-
JAVA EOFの検出 (条件文で「...
おすすめ情報