カレンダーを作るときに、曜日と日にちの場所を合わせるコードの書き方が分かりません。
インターネットで調べたのですが、どれを参考にしたらいいのか、どれがあっているのか分からなかったので、質問させていただきました。教えてください。
説明不足で申し訳ございません。
曜日と日にちの場所というのは、
日 月 火 水 木 金 土
1 2 3 4 5 6 7
8 9 10
という風に曜日のところに数字が来るようにしたいのです。
それが分かると、土曜日のこころで改行という処理も書けるのではないかと思ったからです。
ちなみに。。。
例えば月初めが木曜日からの処理で
1日が木曜日から始まるという処理は出来ています。
for(int i = 0; i < startDay; i++){ System.out.print(" " + " " ) ; } for(int i = 1; i <= lastDay; i++){ System.out.print(i + " " );```
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
java
1public class Main { 2 private static String[][] data(int week,int lastday){ 3 if(week==7){ 4 week=0; 5 } 6 String[][] data=new String[7][7];//初期化 7 data[0]=WeekName.getAllName();//曜日を全部代入 8 int day=1; 9 while(day<=lastday){ 10 data[week/7+1][week%7]=String.format("%2s", String.valueOf(day))+" "; 11 day++;week++; 12 } 13 for(String[] d2:data){ 14 for(int i=0;i<d2.length;i++){ 15 if(d2[i]==null){ 16 d2[i]=" "; 17 } 18 } 19 d2[6]=d2[6]+System.getProperty("line.separator"); 20 } 21 return data; 22 } 23 public static String[][] data(DayOfWeek dow,int last){ 24 return data(dow.getValue(),last); 25 } 26 public static String[][] data(WeekName wn,int last){ 27 return data(wn.getNum(),last); 28 } 29 public static void main(String[] args){ 30 String[][] data=data(DayOfWeek.SUNDAY,29); 31 //String[][] data=data(WeekName.Sunday,29); 32 for(String[] d:data){ 33 for(String d2:d){ 34 System.out.print(d2); 35 } 36 } 37 } 38}
java
1public enum WeekName { 2 Sunday(7," 日"),Monday(1," 月"),Tuesday(2," 火"),Wednesday(3," 水"),Thursday(4," 木"),Friday(5," 金"),Saturday(6," 土"); 3 private final int num; 4 private final String name; 5 WeekName(int num,String name){ 6 this.num=num; 7 this.name=name; 8 } 9 public int getNum(){ 10 return num; 11 } 12 public String getName(){ 13 return name; 14 } 15 public static String[] getAllName(){ 16 String[] r=new String[7]; 17 WeekName[] wn=WeekName.values(); 18 for(int i=0;i<wn.length;i++){ 19 r[i]=wn[i].getName(); 20 } 21 return r; 22 } 23}
enumを使ってみました(日付API使ったほうが効率的w)
投稿2016/07/27 23:40
編集2016/07/28 00:10総合スコア260
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
Java 8用コードです。
また、計算が面倒くさくて、月曜日始めのカレンダーでごめんなさい。
java
1public class CalendarSample { 2 public static void main(String[] args){ 3 final LocalDate d = LocalDate.now().withDayOfMonth(1); 4 final int dayOfWeek = d.getDayOfWeek().getValue(); 5 final int lastDay = d.lengthOfMonth(); 6 7 System.out.println("月 火 水 木 金 土 日"); 8 9 //Print spaces for the first week 10 IntStream.range(0, dayOfWeek).forEach(i->System.out.print(" ")); 11 12 //Print 1 to lastDay 13 IntStream.rangeClosed(1, lastDay) 14 .mapToObj(day->String.format("%2s", String.valueOf(day))+ ((d.plusDays(day).getDayOfWeek()==DayOfWeek.SUNDAY) ? "\n" : " ")) 15 .forEach(System.out::print); 16 } 17}
投稿2016/07/27 08:21

退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
javaにもcのようなprintfメソッドがあります。
java
1System.out.printf("%3d", day);
とすると、幅3を確保して右詰めでint変数dayを表示してくれます。
day=1
__1
day=10
_10
day=100
100
と表示されて、それ以上はふつうに表示されます。(_は空白)
改行位置は
if((初期曜日+day)%7==0)
に近い条件の分岐で可能だと思います。
詳しい表示方法はc言語のprintf関数を調べてみてください。
投稿2016/07/27 06:18
編集2016/07/27 06:21総合スコア868
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。