• ベストアンサー

カレンダーのプログラムなのですが・・・

入力なしで、2004 年 7 月のカレンダーを1行あたり1週が表示される形で出力する(1行あたり1週表示されていれば,多少左右の位置がずれていてもよい)プログラムの書き方がわかりません。 簡単な問題かもしれませんが、教えてください!

質問者が選んだベストアンサー

  • ベストアンサー
  • moccos
  • ベストアンサー率43% (61/140)
回答No.3

>入力なしで・・・というのがコマンドラインパラメータでなくてという意味でしょうか?そのときはmonthに直接代入してください。←よけいなお世話かも。 当方もJAVA初心者でおこがましいのですが回答が無い様なので・・・・ //2004年カレンダーの表示 コマンドラインパラメーターで表示月を入力 public class Calender{ public static void main(String[] args){ int month , i , weekday , arrday ; //月の日数を格納 mth[0]の 4 は2004年元日の位置(シフト用) int[] mth = {4,31,29,31,30,31,30,31,31,30,31,30,31}; String week = " 日 月 火 水 木 金 土"; month = Integer.parseInt(args[0]); //表示する月以前の累積日数を計算するループ int alldays = 0 ; for (i= month -1 ; i >= 0 ;i-- ) { alldays = mth[i] + alldays ; } //初日の位置決め  weekday = alldays % 7 ; //配列の生成数 当月日数+開始位置+1 arrday = mth[month] + weekday +1; //String の配列宣言  String[] day = new String[arrday]; //配列に格納する String型の初期化 String sday = ""; //配列に格納するループ for ( i=0 ; i < arrday ; i++ ) { //格納する日付をString型に変換 sday = String.valueOf( i - weekday ); if ( i <= weekday ) { //開始までの空白条件 day[i] = " "; } else if ( (i - weekday) < 10 ) { day[i] = " " + sday ; //一桁の位置調整条件 } else { day[i] = " " + sday ; } } System.out.println( "\n ★" + month +"月のカレンダー★\n"); System.out.println( week ); //表示用のループ 7配列表示で改行 for ( i=0 ; i < arrday ; i++ ) { System.out.print( day[i] ); if ( i % 7 == 0 ) { System.out.println(); } } System.out.println(); } } コマンドプロンプトで以下のように出力されます。 ★7月のカレンダー★ 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

その他の回答 (3)

  • t-satoh
  • ベストアンサー率35% (211/591)
回答No.4

 これって基本的なことが解っているなら、 アルゴリズムの問題でしかない気が・・・。(^^;)  とりあえず、簡単に、当月のカレンダーを、 表示するだけのアプリケーションを作成しました。 かなり、適当なので、参考までに。(^^;) //CalendarApp.java import java.text.*; import java.util.*; import java.awt.*; import javax.swing.*; public class CalendarApp extends JFrame{ public CalendarApp(){ JLabel[][] cal = new JLabel[7][7]; JPanel panel = new JPanel(); Calendar now = Calendar.getInstance(); int month = now.get(Calendar.MONTH); //月の初日へセット now.set(Calendar.DATE,1); //レイアウトの設定 getContentPane().setLayout(new BorderLayout()); //カレンダーの見出し getContentPane().add(new JLabel(new SimpleDateFormat("yyyy年MM月").format(now.getTime())),BorderLayout.NORTH); //カレンダーヘッダー部の設定 cal[0][0]=new JLabel("日"); cal[0][1]=new JLabel("月"); cal[0][2]=new JLabel("火"); cal[0][3]=new JLabel("水"); cal[0][4]=new JLabel("木"); cal[0][5]=new JLabel("金"); cal[0][6]=new JLabel("土"); //カレンダー本体の初期化 for(int i=1;i<cal.length;i++) for(int j=0;j<cal[0].length;j++) cal[i][j] = new JLabel(); //カレンダーの生成 for(int i=1;month==now.get(Calendar.MONTH) && i<cal.length;i++) for(int j=0;month==now.get(Calendar.MONTH) && j<cal[0].length;j++,now.add(Calendar.DATE,1)){ if(i==1 && j==0) j=now.get(Calendar.DAY_OF_WEEK)-1; cal[i][j] = new JLabel(Integer.toString(now.get(Calendar.DATE))); } //生成したカレンダーをパネルへセット panel.setLayout(new GridLayout(cal.length,cal[0].length)); for(int i=0;i<cal.length;i++) for(int j=0;j<cal[0].length;j++) panel.add(cal[i][j]); //パネルをアプリケーション本体へ追加 getContentPane().add(panel,BorderLayout.CENTER); //コンポーネントの表示 setVisible(true); } public static void main(String args[]){ CalendarApp app = new CalendarApp(); app.setBounds(100,100,250,250); app.show(); } }

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

VBAやExcelでカレンダーを作りました。 コンソールなら、 1.表示位置を指定するためのTABやスペースを設定。 2.月の最初の曜日を得る。 3.曜日位置に従って、表示位置まで移動。 4.土曜か日曜で改行 5.翌週表示。 6.月末日になったら表示終了

回答No.1

もう少し具体的に描いていただかないと回答者の方も回答のしようがありませんよ。 1.出力デバイスは何ですか? (ディスプレイ or プリンタ) 2.使用の言語は何ですか? ( C or VB etc) COBOL85なら私にも書けるんですが、それ以外では私には無理なんですが(^^;

関連するQ&A