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

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

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

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

Q&A

2回答

2135閲覧

二次元配列を使ったカレンダーがきれいに表示できません

unguhft

総合スコア1

Java

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

1グッド

0クリップ

投稿2021/09/15 08:31

二次元配列とday of week うるう年を取得するleep yearを使いその月のカレンダーを表示させるプログラムを作っているのですが綺麗に並べることができません
綺麗に表示する方法を教えてほしいです
イメージ説明
###java
###ソースコード
import java.io.*;

public class sample68
{
public static void main (String[] args)throws IOException
{
System.out.println("西暦年を入れてください");
BufferedReader br=
new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int yy = Integer.parseInt(str);

System.out.println("月を入力してください"); str = br.readLine(); int mm = Integer.parseInt(str); day_of_week obj1 = new day_of_week(); int wk = obj1.youbi(yy,mm,1); int tuki_max =31; switch (mm){ case 2: leap_year obj2 = new leap_year(); tuki_max = obj2.uruudosi(yy); break; case 4: case 6: case 9: case 11: tuki_max =30; break; } int cnt_day = 1; System.out.println("日\t月\t火\t水\t木\t金\t土"); int[][] cal_tbl = new int[6][7];

//カレンダー配列の初期化
int i;
int j;
for(i=0; i<6; i++){
for(j=0; j<7; j++){
cal_tbl[i][j] = 0;
}
}
for(i=0; i<6; i++){
for(j=0; j<7; j++){
if(i==0){
if(j> wk-0){
cal_tbl[i][j] =cnt_day;
cnt_day = cnt_day+1 ;
}
}
else if(cnt_day<tuki_max){
cal_tbl[i][j] =cnt_day;
cnt_day = cnt_day +1;

}
}
}

for(i=0; i<6; i++){ for(j=0; j<7; j++){ if(cal_tbl[i][j]==0){ System.out.println(" " + "\t");

}else{
System.out.print(cal_tbl[i][j] +"\t");
}
}
}
}
}

day_of_week

import java.util.Date;
import java.util.Calendar;
class day_of_week{

//フィールド int youbi(int yy,int mm,int dd){ //メソッド //現在日付設定 Date today = new Date();//現在日取得 //Calendarクラスオブジェクト生成 Calendar cal = Calendar.getInstance(); //現在日付設定 cal.setTime(today); cal.set(Calendar.YEAR,yy); cal.set(Calendar.MONTH,mm-1); cal.set(Calendar.DATE,dd);

int wk = cal.get(Calendar.DAY_OF_WEEK);

return wk; }

}

class leap_year
{
int dim;
int uruudosi(int yy){
if ((yy % 4 == 0 && yy % 100 != 0) || yy % 400 == 0){
dim = 29;
}else{
dim=28;
}
return dim;
}

}

試したこと

どこをどうすればいいかわからないです

イメージ説明

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

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

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

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

tkturbo

2021/09/15 08:46

「綺麗に並べる」の正確な定義を教えてくれませんか?
unguhft

2021/09/15 08:52

はみ出ることなく四週分の数字を表示したいです。
TN8001

2021/09/15 09:11

[Java - 二次元配列を使ったカレンダーを作成しているのですが上手く表示されません|teratail](https://teratail.com/questions/212940 完全に同一というわけではありませんが、わけのわからないところまで似ているので元ネタは同じなのでしょう。 このコードを「正しく出力するように直せ」という課題なんでしょうか? つまり質問者がこのコードを書いたわけではないし、(おそらく)コードの意味も何もわかっていないということなんでしょうか? だとすると丸投げですし、どこまでわかっているのかの説明が必要です。 いっそこのコードは捨てて、自分が理解できている方法でカレンダーを出力したらどうですか?
unguhft

2021/09/15 09:17

解決法が分かるなら教えてほしいのですが
kazuma-s

2021/09/16 19:59

ソースコードは、「```java」の行と、「```」の行で挟んでください。 質問は編集できます。
guest

回答2

0

System.out.println(" " + "\t"); の println を print に変更し、
j の forループの直後、すなわち i の forループの最後に、
System.out.println(); を追加すれば、6行の表示にはなるでしょう。

しかし、正しいカレンダーにはなりません。
if(j> wk-0){else if(cnt_day<tuki_max){ にも修正が必要です。
どうすればいいか分かりますか? コメントをお願いします。

質問への回答とは別に、
2次元配列と java.util.Calendar を使わないコードを書いてみました。

java

1class Main { 2 static final int[] a = { 31,28,31,30,31,30,31,31,30,31,30,31 }; 3 static final int[] b = { 1, 4, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5 }; 4 5 public static void main (String[] args) { 6 var s = new java.util.Scanner(System.in); 7 System.out.println("西暦年を入れてください"); 8 int y = s.nextInt(); 9 System.out.println("月を入力してください"); 10 int m = s.nextInt(); 11 int z = a[m-1]; // z は m月の最終日 12 if (m == 2 && y%4 == 0 && (y%100 != 0 || y%400 == 0)) z++; // 閏年 13 if (m < 3) y--; // 3月より前の月は y年の閏年の影響を受けない 14 int w = (y + y/4 - y/100 + y/400 + b[m-1]) % 7; // w は曜日 15 System.out.print("日 月 火 水 木 金 土\n" + " ".repeat(w*3)); 16 for (int d = 1; d <= z; d++) 17 System.out.printf("%2d%s", d, ++w%7 == 0 ? "\n" : " "); 18 for (; w < 42; w += 7) System.out.println(); 19 } 20}

投稿2021/09/16 19:57

編集2021/09/17 00:51
kazuma-s

総合スコア8224

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

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

unguhft

2021/09/21 13:25

削除依頼を出したので返信がないと思っていたのですが返信感謝します すいませんjavaの知識が浅くわからないです。
guest

0

削除申請したぐらいですから見ていないんでしょうが、カレンダー表示自体はありがちですので回答しておきます。

配列に入れる意味は感じませんが、質問タイトルに入っているため使用しました(無駄なクラスはバッサリカット)

Java

1import java.util.Calendar; 2import java.util.Scanner; 3 4public class Sample { 5 public static void main(String[] args) { 6 Scanner sc = new Scanner(System.in); 7 8 System.out.println("西暦年を入れてください"); 9 int year = Integer.parseInt(sc.nextLine()); 10 11 System.out.println("月を入力してください"); 12 int month = Integer.parseInt(sc.nextLine()); 13 14 Calendar cal = Calendar.getInstance(); 15 cal.set(Calendar.YEAR, year); 16 cal.set(Calendar.MONTH, month - 1); 17 cal.set(Calendar.DATE, 1); 18 19 int wk = cal.get(Calendar.DAY_OF_WEEK); 20 int tuki_max = cal.getActualMaximum(Calendar.DATE); 21 22 int[][] cal_tbl = new int[6][7]; 23 int cnt_day = 1; 24 25 for (int i = 0; i < 6; i++) { 26 for (int j = 0; j < 7; j++) { 27 if (i == 0 && j < wk - 1) { 28 continue; 29 } 30 31 if (cnt_day <= tuki_max) { 32 cal_tbl[i][j] = cnt_day++; 33 } 34 } 35 } 36 37 System.out.println("日\t月\t火\t水\t木\t金\t土"); 38 for (int[] anInt : cal_tbl) { 39 for (int i : anInt) { 40 if (i == 0) { 41 System.out.print(" \t"); 42 } else { 43 System.out.printf("%2d\t", i); 44 } 45 } 46 System.out.println(); // ココ 47 } 48 } 49}
西暦年を入れてください 2021 月を入力してください 9 日 月 火 水 木 金 土 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

投稿2021/09/16 15:14

編集2023/07/29 05:28
TN8001

総合スコア9242

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問