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

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

新規登録して質問してみよう
ただいま回答率
85.35%
標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Java

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

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

2977閲覧

生年月日を入力し、生年月日と曜日を出力したい。

hona_tan

総合スコア45

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Java

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

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2020/12/02 10:21

編集2020/12/03 05:32

曜日がズレて表示されます。
どうすればいいですか?

MyBirthday.java

class MyBirthday { int year, month, day; MyBirthday(int y, int m, int d) { year = y; month = m; day = d; } public String toWareki() { int i; if (year>=2019) { i = year - 2019 + 1; return "令和" +i; } else if (year>=1989){ i = year - 1989 + 1; return "平成" +i; } else if (year>=1926) { i = year - 1926 + 1; return "昭和" +i; } else if (year>=1912) { i = year - 1912 + 1; return "大正" +i; } else if (year>=1868){ i = year - 1868 + 1; return "明治" +i; } return null; } public String getDayOfWeek() { if (month == 1 || month == 2) { year = year - 1; month = month + 12; } int h = (year + year / 4 - year / 100 + year / 400 + (13 * month + 8) / 5 + day) % 7; if (h == 0) { return "日"; } else if (h == 1) { return "月"; } else if (h == 2) { return "火"; } else if (h == 3) { return "水"; } else if (h == 4) { return "木"; } else if (h == 5) { return "金"; } else if (h == 6){ return "土"; } return null; } public String toString() { return year+ "(" +toWareki()+ ")年 " +month+ "月" +day+ "日 (" +getDayOfWeek()+ ") "; } }

MyBirthdayTest.java

import java.util.Scanner; public class MyBirthdayTest { public static void main(String[] args) { System.out.println("生年月日を入力してください。"); Scanner str = new Scanner(System.in); int year = str.nextInt(); int month = str.nextInt(); int day = str.nextInt(); MyBirthday m = new MyBirthday(year, month, day); System.out.println(m); } }

Eclipse_2020-06を使っています。

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

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

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

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

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

dodox86

2020/12/02 10:39

あくまで計算で求めるのがテーマなのでしょうか。java.util.Calendarクラスなど、既存のクラスのメソッドは使わない、ということでしょうか。
hona_tan

2020/12/02 11:12

そうです。java.util.Calendarクラスは使わずに計算で求めます。
dodox86

2020/12/03 05:08

最初の質問は「曜日を求める」であったのに、質問が変わっています。そんな場合は新たに質問を立てます。 いったんはBAが付き、質問は閉じていたはずで、回答していただいた方に失礼です。
hona_tan

2020/12/03 05:28

了解しました。ベストアンサーをまた元に戻して新たに質問を立て直します。 ご指摘ありがとうございました。
guest

回答2

0

ベストアンサー

ツェラーの公式

java

1 /** 2 * 0 日曜日 3 * 1 月曜日 4 * 2 火曜日 5 * 3 水曜日 6 * 4 木曜日 7 * 5 金曜日 8 * 6 土曜日 9 * @param year 10 * @param month 11 * @param day 12 * @return 13 */ 14 public int dayOfWeek(int year, int month, int day) { 15 int c,y,week; 16 if (month == 1 || month == 2) { 17 year--; 18 month += 12; 19 } 20 c = year / 100; 21 y = year - c * 100; 22 week = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1; 23 while (week < 0) { 24 week += 7; 25 } 26 week %= 7; 27 return week; 28 }

こちの方法がおすすめです

java

1 Scanner scanner = new Scanner(System.in); 2 int year = scanner.nextInt(); 3 int month = scanner.nextInt(); 4 int dayOfMonth = scanner.nextInt(); 5 DateTimeFormatter japaneseEraDtf = DateTimeFormatter.ofPattern("(GGGGyy) 年 MM 月 dd 日 (E)") 6 .withChronology(JapaneseChronology.INSTANCE) 7 .withLocale(Locale.JAPAN); 8 String output = LocalDate.of(year, month, dayOfMonth).format(japaneseEraDtf); 9 System.out.println(output);

投稿2020/12/02 11:08

編集2020/12/02 11:33
wyq2020

総合スコア60

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

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

hona_tan

2020/12/02 12:45

できました!ありがとうございました。
hona_tan

2020/12/03 05:30

何度もベストアンサー外したりつけたりして申し訳ありませんでした。wyq2020様のおかげで曜日をうまく出力できるようになりました。ありがとうございました。
guest

0

質問のコードをちょっと修正すれば済みます。

diff

1- int h = (year + year / 4 - year / 100 + year / 400 + (13 * month + 8) / 5 + dayear) % 7; 2+ int y = year, m = month; 3+ if (m < 3) { y--; m += 12; } 4+ int h = (y + y / 4 - y / 100 + y / 400 + (13 * m + 8) / 5 + day) % 7;

投稿2020/12/02 15:16

編集2020/12/02 15:25
kazuma-s

総合スコア8224

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問