ここから本文です

解決済みの質問

知恵コレに追加する

javaをつかってカレンダーを作る方法について。

angeloftheredさん

javaをつかってカレンダーを作る方法について。

javaでカレンダーを表示するプログラムをつくって、
コマンドプロンプトで曜日と日にちをカレンダーのように表示させ
プログラムを作りたいんです。

1~31まで表示させる方法はわかるのですが、カレンダーのように七日区切りで
表示させることができません。
また、月の初めの1日の曜日を指定して1~31日まで表示させたいのです。
例えば、1日が水曜日なら水曜日から1日、2日、3日と
表示させたいのですが、どうすればいいでしょうか?
指定の方法は月曜=1、火曜=2、水曜=3という風に置き換えて
キーボードから直接入力するのですが・・・
考えているのは、置き換えられた数字の分だけ空白を入れるという方法なのですが、
いまいちうまく動きません。

java初心者なので、どなたか教えてください。
よろしくお願いします

違反報告

ベストアンサーに選ばれた回答

nightmare_lukaさん

少々強引なつくり方をしていまいましたが、参考にしてもらえると幸いです。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Calendar;
public class CalendarTest{
public static void main(String[] args)throws IOException{
//コマンドラインに入力した文字列がbrに代入される
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//文字列型の2次元配列でカレンダーを表現する
String[][] calendar=new String[100][7];
//曜日を格納した文字列型配列
String[] daysOfWeek={"","月 ",""," 水 "," 木 "," 金 "," 土 "};
//各月の日数の格納したint型配列
int[] daysOfMonth=new int[12];
//date=日数,retsu=現在のカレンダーの列数,gyou=現在のカレンダーの行数
int date=0,retsu=0,gyou=0;
Calendar[] cal=new Calendar[12];
//今年の年数をコマンドラインから入力させる
System.out.println("今年は西暦何年ですか?");
int year=Integer.parseInt(br.readLine());
//calendarを初期化
for(int i=0;i<100;i++){
for(int j=0;j<7;j++){
calendar[i][j]=" ";
}
}
for(int i=0;i<12;i++){
//gyou++;は改行
gyou++;
//i月の日数を取得し、daysOfMonth[i]に代入
cal[i]=Calendar.getInstance();
cal[i].set(Calendar.YEAR,year);
cal[i].set(Calendar.MONTH,i);
daysOfMonth[i]=cal[i].getActualMaximum(Calendar.DAY_OF_MONTH);
//カレンダーにi月と入力
calendar[gyou][0]=String.valueOf(cal[i].get(Calendar.MONTH))+"月";
gyou++;
//カレンダーに曜日を入力
for(int j=0;j<7;j++){
calendar[gyou][j]=daysOfWeek[j];
}
gyou++;
do{
date++;
//現在の日にちが何番目の曜日かをretsuに代入
cal[i].set(Calendar.DATE,date);
retsu=cal[i].get(Calendar.DAY_OF_WEEK);
//カレンダーに日にちを代入
//日にちが一桁の場合,日にちの前に" "をくっつけてずれないようにする
if(date<10){
calendar[gyou][retsu-1]=" "+String.valueOf(date)+" ";
}else{
calendar[gyou][retsu-1]=String.valueOf(date)+" ";
}
//土曜日になったら改行
if(retsu%7==0&&date!=daysOfMonth[i]){
gyou++;
}
}while(date<daysOfMonth[i]);
//月の最終日になったらwhileループを抜け,改行して日にちを初期化
gyou++;
date=0;
}
//カレンダーを出
for(int i=0;i<100;i++){
for(int j=0;j<7;j++){
System.out.print(calendar[i][j]);
}
System.out.println();
}
}
}

この質問は投票によってベストアンサーが選ばれました!

この質問・回答は役に立ちましたか?
はい
いいえ

お役立ち度:お役立ち度 0点(5点満点中)2人中 0人が役に立つと評価しています。

ベストアンサー以外の回答

1件中11件)

 

mikan_x64さん

もっとスマートな方法もあるとは思いますが、月初日の曜日の分だけずらしたい、とか、7日おきに区切り(改行?)を入れたいという目的が明確のようですから、このようなプログラムにしてみました。



import java.util.Calendar;

public class MyCalendar {

public static void main(String[] args) {

dispCalendar(2009, 1);

}

public static void dispCalendar(int year, int month) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month - 1); // 1月は0、2月は1で表現するため
cal.set(Calendar.DAY_OF_MONTH, 1);
int week = cal.get(Calendar.DAY_OF_WEEK);

// 日曜始まりとして、オフセットを求める
int offset = 0;
if (week == Calendar.SUNDAY) {
offset = 0;
} else if (week == Calendar.MONDAY) {
offset = 1;
} else if (week == Calendar.TUESDAY) {
offset = 2;
} else if (week == Calendar.WEDNESDAY) {
offset = 3;
} else if (week == Calendar.THURSDAY) {
offset = 4;
} else if (week == Calendar.FRIDAY) {
offset = 5;
} else if (week == Calendar.SATURDAY) {
offset = 6;
}

// 月末日を求め
int last_day = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

// 7日ごとに改行するカウンタ
int counter = 0;

// 曜日見出しを表示する
System.out.println("日 月 火 水 木 金 土");

// オフセット分進める
for (int i = 0; i < offset; i++) {
System.out.print(" "); //■■■知恵袋の関係でスペースが1つになってしまいますが、半角スペース3つに直してください
counter++;
}

// 1日から月末日まで、カレンダーを表示する
for (int day = 1; day <= last_day; day++) {
if (day < 10) {
System.out.print(" " + String.valueOf(day) + " ");
} else {
System.out.print(String.valueOf(day) + " ");
}
counter++;
if (counter == 7) {
// 7日おきに改行する
counter = 0;
System.out.println();
}
}

System.out.println();

}
}

回答ありがとうキャンペーン 回答してポイントを当てよう!! 2000名様に500ポイントプレゼント キャンペーンの詳細を見る ※回答することで自動的に応募となります。

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。

お客様自身の責任と判断で、ご利用ください。

話題のキーワード

[カテゴリ:Java]

ただいまの回答者

21時16分現在

3290
人が回答!!

1時間以内に6,699件の回答が寄せられています。