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

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

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

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

Q&A

3回答

4091閲覧

Javaでカレンダーを作りたいです

solz

総合スコア12

Java

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

0グッド

0クリップ

投稿2019/05/07 05:30

前提・実現したいこと

1,キーボードで"yyyy/MM"の形式で年と月を入力
2,yyyy/MMで入力された数字をyyyy/MMで出力

現在は入力する際、
yyyy
MM
のような形で入力する方法しかわからない状態です、
キーボードでyyyy/MMの形式で入力する方法で何かいいやり方はありませんでしょうか。

また、2点目ですが、キーボードからMM(例:03)と入力しても
頭に0か付かずに出力されてしまいます。
こちらも解決法を教えて頂けると幸いです。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

Java

1package calendar; 2 3import java.util.Calendar; 4import java.util.Scanner; 5 6 7public class Mycalendar { 8 9 public static void main(String[] args) { 10 java.util.Calendar cal = java.util.Calendar.getInstance(); 11 12 System.out.println("カレンダーを表示したい年月をYYYY/MMで指定してください"); 13 14 Scanner scan = new Scanner(System.in); 15 int year = scan.nextInt(); 16 int month = scan.nextInt(); 17 18 if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ) { 19 System.out.println(" "); 20 System.out.println(year + "/" + month + "(うるう年)"); 21 System.out.println(" "); 22 System.out.println("日 月 火 水 木 金 土"); 23 System.out.println("---------------------"); 24 25 } else { 26 System.out.println(" "); 27 System.out.println(year + "/" + month); 28 System.out.println(" "); 29 System.out.println("日 月 火 水 木 金 土"); 30 System.out.println("---------------------"); 31 } 32 33 cal.set(Calendar.YEAR, year); 34 cal.set(Calendar.MONTH, month -1); 35 cal.set(Calendar.DATE, 1); 36 37 int week = cal.get(java.util.Calendar.DAY_OF_WEEK); 38 int lastDay = cal.getActualMaximum(java.util.Calendar.DAY_OF_MONTH); 39 40 int counter = 0; 41 42 for (int i = 1; i < week ; i ++) { 43 System.out.print(" "); 44 counter ++; 45 46 } 47 for (int day = 1 ; day <= lastDay; day ++) { 48 if (day < 10) { // ズレ 49 System.out.print(" " + day + " "); 50 } else { 51 System.out.print( day + " "); 52 53 } 54 counter ++; 55 56 if (counter == 7) { // 7日ごとに下段に 57 58 counter = 0; 59 System.out.println(); 60 } 61 } 62 } 63} 64

試したこと

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

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

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

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

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

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

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

m.ts10806

2019/05/07 06:03

タイトルは質問要件(起きている問題)に寄せてください。
guest

回答3

0

Scanner には, 分割するパターンを指定できる useDelimiter があります.

java

1package calendar; 2import java.util.Calendar; 3import java.util.Scanner; 4import static java.util.Calendar.*; 5 6public class Mycalendar { 7 public static void main(String[] args) { 8 System.out.println("カレンダーを表示したい年月をYYYY/MMで指定してください"); 9 10 Scanner scan = new Scanner(System.in).useDelimiter("/"); 11 int year = scan.nextInt(); 12 int month = scan.nextInt() - 1; //月は 0 始まりとする 13 14 Calendar cal = Calendar.getInstance(); 15 cal.set(YEAR, year); 16 cal.set(MONTH, month); 17 cal.set(DATE, 1); 18 19 System.out.println(); 20 System.out.println(year + "/" + (month+1) + (((java.util.GregorianCalendar)cal).isLeapYear(year)?"(うるう年)":"") ); 21 System.out.println(); 22 System.out.println("日 月 火 水 木 金 土"); 23 System.out.println("---------------------"); 24 25 cal.add(DATE, SUNDAY-cal.get(DAY_OF_WEEK)); //1日が属する週の日曜日の日付. ex)2019/5/1→2019/4/28 26 for (; cal.get(MONTH) <= month; cal.add(DATE, 1)) { 27 System.out.printf(cal.get(MONTH)<month?" ":"%2d ", cal.get(DATE)); 28 if (cal.get(DAY_OF_WEEK) == SATURDAY) System.out.println(); 29 } 30 } 31}

投稿2019/05/08 08:53

編集2019/05/08 09:17
jimbe

総合スコア12545

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

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

0

キーボードでyyyy/MMの形式で入力する方法で何かいいやり方はありませんでしょうか。

一行丸々読み込んでからスラッシュで分割し、それぞれ数値化すれば良いです。
次のメソッドについてそれぞれ調べてみると良いでしょう。

  • Scanner#nextLine
  • String#split
  • Integer.valueOf

2点目ですが、キーボードからMM(例:03)と入力しても

頭に0か付かずに出力されてしまいます。

数値化した時点で不要な情報は削ぎ落とされているのです。

System.out.printfを使うと便利です。
例えば0埋め2ケタの数値なら、次のように使います。

Java

1System.out.printf("%02d", day);

投稿2019/05/07 05:40

LouiS0616

総合スコア35658

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

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

solz

2019/05/07 05:44

回答して頂きありがとうございます。 メソッドについて、調べてみます。当方初心者の為、なぜ0が消えるのかも知らなかったので 知ることが出来てよかったです。
guest

0

nextIntメソッドの場合、入力したトークンを整数で取得してしまうので、

"yyyy/MM"の形式

で取得したい場合はnextメソッドで文字列を取得してください。

2点目ですが、キーボードからMM(例:03)と入力しても頭に0か付かずに出力されてしまいます。

intは整数型なので、先頭に0はつけられません。
やはりこちらも文字列にして取得しなければいけません。

投稿2019/05/07 05:38

編集2019/05/07 05:39
BluOxy

総合スコア2663

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

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

solz

2019/05/07 05:43

回答ありがとうございます。 メソッドの問題だったのですね。理解が足りていなかったです、試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問