質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

7905閲覧

日にちと曜日の場所の合わせ方

Tutti

総合スコア83

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/07/27 02:07

編集2016/07/27 06:03

カレンダーを作るときに、曜日と日にちの場所を合わせるコードの書き方が分かりません。
インターネットで調べたのですが、どれを参考にしたらいいのか、どれがあっているのか分からなかったので、質問させていただきました。教えてください。

説明不足で申し訳ございません。
曜日と日にちの場所というのは、
日 月 火 水 木 金 土
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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2016/07/27 02:14

"曜日と日にちの場所"の場所とは、どういう意味で使っていますか? 
swordone

2016/07/27 02:15

「曜日と日にちの場所を合わせる」これをもう少し具体的に説明して下さい。
guest

回答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
tignear

総合スコア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
intelf___

総合スコア868

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tutti

2016/07/27 06:20

調べてみます!ありがとうございます!!!
guest

0

ベストアンサー

「曜日を表すもの」を用意し、日付とともに変化させながらループさせるのが基本になります。土曜日になったら改行すればいいだけです。
Calendarクラスを使うならCalendarの日付を変化させ、曜日を取得しながら曜日を判断するという手法もありますし、Calendarを使わずとも曜日を意味する0~6の数値を用意し土曜の6になったら0に戻す、という方法も考えられます。Java8が使えるならDayOfWeekを使うのも手です。

投稿2016/07/27 02:45

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tutti

2016/07/27 05:51

日付とともに変化させながらループのところのヒントをもう少し教えていただけませんか?
swordone

2016/07/28 01:45

目的は単純です。1日から月末日まで順に出力していくわけですが、土曜日のあと、日曜日の日付を出力する前に改行したいのです。そのためには、「今出力しようとしている日付が何曜日なのか」の情報が必要なのです。
Tutti

2016/07/28 01:49

あ!!!なるほど!!そうですね!!いつも丁寧に教えてくださりありがとうございます。とても感謝しております。
Tutti

2016/07/28 01:53

if (cal.get(java.util.Calendar.DAY_OF_WEEK) ==java.util.Calendar.SUNDAY) { System.out.println(); } こういうことですね!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問