C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: for文について


(過去ログ 45 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■23919 / inTopicNo.1)  for文について
  
□投稿者/ sac (1回)-(2008/08/25(Mon) 00:17:57)

分類:[.NET 全般] 


VS2003のC#でコーディングしているのですが、
年と月の処理の部分で困っています。

どのような処理かと言うと、
開始年(コンボボックス)開始月(コンボボックス)〜終了年(コンボボックス)終了月(コンボボックス)
を選択した結果を「表示」ボタン押下時に「データグリッド」に出力したいのですが、
選択した期間をXヶ月でfor文を使いループさせ(例:2008年8月〜2010年2月)、
Xが12ヶ月を超えたら、月を1に戻し、かつ年を1プラスするというループ文を作成したいと思っています。

for (int m = 0; m < (((y.endyear - y.Syear)*12)+(m.endmonth - m.Smonth + 1)); m++)
これにプラスとして、選択期間が28ヶ月だとしたら、ループが12を超えたら月を1に戻し、かつ年を1プラスしてデータグリッドに表示させるという処理を行いたいです。

どうかご教授お願いいたします。
引用返信 編集キー/
■23920 / inTopicNo.2)  Re[1]: for文について
□投稿者/ Azulean (190回)-(2008/08/25(Mon) 00:27:52)
int i;

iには0〜27が入るとする。
この場合、0〜11が1年目の1〜12にあたり、12〜23が2年目の1〜12にあたる。

int y = i / 12 + 1; // 年
int m = i % 12 + 1; // 月

この考えで行けば、開始月・開始年をオフセットすればできますよね。
for文の条件の設定やオフセットの仕方は考えてみて下さい。
引用返信 編集キー/
■23921 / inTopicNo.3)  Re[2]: for文について
□投稿者/ なちゃ (163回)-(2008/08/25(Mon) 00:37:31)
うーん、DateTimeに変換して素直に書いたほうがいい気がしないでもない。

引用返信 編集キー/
■23922 / inTopicNo.4)  Re[3]: for文について
□投稿者/ επιστημη (1279回)-(2008/08/25(Mon) 08:36:54)
επιστημη さんの Web サイト
> うーん、DateTimeに変換して素直に書いたほうがいい気がしないでもない。
↓ですよねー

using System;
using System.Collections.Generic;

class Program {

  // fromYear から toYear を越えない範囲で列挙する
  public static IEnumerable<DateTime> DateRange(int fromYear, int toYear) {
    DateTime dt = new DateTime(fromYear,1,1);
    do { yield return dt; dt = dt.AddMonths(1); } while ( dt.Year <= toYear );
  }

  // おためし
  public static void Main() {
    foreach ( DateTime dt in DateRange(2008, 2010) ) {
      Console.WriteLine("{0}/{1}  ",dt.Year,dt.Month);
    }
  }
}

引用返信 編集キー/
■23926 / inTopicNo.5)  Re[1]: for文について
□投稿者/ こくぶんまさひろ (4回)-(2008/08/25(Mon) 10:30:21)
こくぶんまさひろ さんの Web サイト
No23919 (sac さん) に返信

for 文 1 個で何とかしようとするから混乱するのだと思います。

for (y.Syear から y.endyear までぐるぐる) {
  for (1 から 12 までぐるぐる : 但し最初の年はy.Smonthから、最後の年はy.endmonthまで) {
    // 表示
  }
}

とすればよいのではないでしょうか?
(処理中に件数を使用する必要があると↑の方法は使いづらいけど)

# ……個人的にはεπιστημηさんの方法の方が好きです。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -