countdownの改良アイデアとヒント
こんにちは、管理人イガジーです。
昨日までで countdownプログラムは一区切りつけた(つもり)ですが
プログラミングは「自分の思うように(望むように)プログラムを動かす」ところに
面白さがあります。
でも、最初のうちは、何ができるのか、どこまで可能か、などが見えないので
「好きなように改造してください」と言われても困ってしまうかもしれません。
そこで、比較的簡単にできる改良(課題)と、そのヒントを書いておきます。
もちろん、実現方法はひとつとは限りません。
課題は次の3つ
(a)分単位(60秒間隔)で更新する際に、更新遅延を少なくする
(b)残り日数が7日以上であれば、背景色を緑にする。
(7日を切ると、黄色背景にする)
(c)「今日はxxxx年xx月xx日」の後ろに「曜日」を追加する
(例えば”今日は2011年11月8日(火)”など)
ヒントは次のとおりです。
(a)更新遅延を少なくする
分単位の更新をするのに、タイマーの周期を60000にすると、プログラムの
起動タイミングによって、毎分25秒に更新されたり、毎分50秒に更新されたりします。
周期を1秒(1000)にしてチェックし、分の変化がなければ何もせずに抜ける
のもひとつの手ですが、
起動時の秒数を調べて、「60秒-その秒」ぶんをタイマースタートの遅延として
tmr.schedule(new DoCount(), スタート遅延, 60000);
に設定するのが効率的です。
つまり、起動時刻(cms)が xx分25秒であれば、35秒の開始遅延
xx分50秒であれば、10秒の開始遅延をセットするのです。
(計算式にすると、60000-(cms%60000) になります)
(b)現状の背景色処理は
if (st>0) rest.setBackground(Color.YELLOW);
else rest.setBackground(Color.RED);
で、正ならば黄色、負なら(過ぎてしまったら)赤です。
これに条件(if文)を追加して
if (残り日数>6 ) rest.setBackground(Color.GREEN);
else if (st>0) rest.setBackground(Color.YELLOW);
else rest.setBackground(Color.RED);
とすれば良いでしょう。
(c)曜日は、int dow=c.get(Calendar.DAY_OF_WEEK);
で1〜7の数値が得られます。
1が日曜(sun)で、2が月曜(mon)、7が土曜(sat)です。
本当は、日曜が1である保証はないので、Calendar.SUNDAY 等を使うべき
なのですが、個人的なプログラムなら「1=日曜決め打ち」でも問題ないでしょう。
final String wn[]={
"日","月","火","水","木","金","土"
// "sun","mon","tue","wed","thu","fri","sat"
};
という配列を用意して、wn[dow-1]で曜日の文字列が得られます。
もうひとつの方法として、String.formatの代わりに
SimpleDateFormat sdf=new SimpleDateFormat("今日はyyyy年M月d日(E)");
を使う手もあります。
new SimpleDateFormat()で、フォーマット(※)を定義しておき、
String td=sdf.format(c.getTime()); で文字列を得ます。
※ E が曜日、yyyy が4桁の年、M が月、d が日にちを表します。
ソースコードがあれば、この様にちょいちょいと改造ができるのです。
プログラミングを楽しんでください。
countdownプログラムを作ってみよう1
countdownプログラムを作ってみよう2
countdownプログラムを作ってみよう3
countdownプログラムを作ってみよう4
countdownプログラムを作ってみよう5
countdownプログラムを作ってみよう6
この記事へのコメントはこちら