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

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

ただいまの
回答率

90.99%

  • Java

    12186questions

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

  • MacOS(OSX)

    1644questions

    MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

javaでのカレンダー作成応用課題がわかりません

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 257

PCHK

score 1

前提・実現したいこと

学校の課題にて2017年から2019年までのカレンダーをjavaで作成するというものが出ました。日にちはしっかりと表示されるようになったのですが、曜日と正月から何日経ったかの表示がうまくいきません。それを表示できるようにしたいです。

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

2018・1・1は実際は月曜であるのに火曜と表示される。
2018・1・1は[1/365]であるのに[366/365]と表示される。

該当のソースコード

class PCHK1 {
public static void main (String[] args){
int i;
int year = Integer.parseInt(args[0]);
int month=Integer.parseInt(args[1]);
int day=Integer.parseInt(args[2]);
int[] m={0,31,28,31,30,31,30,31,31,30,31,30,31};
int count = 1;

if ( year==2017 ){
String[] week= {"Sat","Sun","Mon","Tue","Wed","Thu","Fri"};

for(i=1; i<month; i++){
count=count+m[i];
}
count=count + (year-2017)*365;
System.out.println("2017:"+month+":"+day+":"+week[count%7]+":("+count+"/365)");
}

else if ( year==2018 ){
String[] week= {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};

for(i=1; i<month; i++){
count=count+m[i];
}
count=count + (2018-2017)*365;
System.out.println("2018:"+month+":"+day+":"+week[count%7]+":("+count+"/365)");
}

else if ( year==2019 ){
String[] week= {"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};

for(i=1; i<month; i++){
count=count+m[i];
}
count=count + (2019-2017)*365;
System.out.println("2019:"+month+":"+day+":"+week[count%7]+":("+count+"/365)");
}
}
}

試したこと

色々試していますが、なかなかできません。

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

MacBookAir
tool:mi
ターミナル(MacBook搭載)

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • PCHK

    2017/11/10 14:54

    LouiS0616さん、ありがとうございます。

    キャンセル

  • PCHK

    2017/11/10 14:55

    fuzzballさん、その年の正月からです!わかりにくくて申し訳ないです。

    キャンセル

  • swordone

    2017/11/10 15:07

    Calendarクラスなどは使用不可ですか?

    キャンセル

回答 2

checkベストアンサー

+2

例えば2018年の場合、

count=count + (2018-2017)*365;

この加算をしてしまうと、countは2017年の正月からの経過日数になってしまいます。
その状態で2018年用の曜日テーブルである、

String[] week= {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};

を使用しているために曜日もずれてしまっています。

 「その年の正月からの経過日数」の場合

「年」に対する日数を加算する必要はありませんので、count=count + (2018-2017)*365;を削除すればいいです。

 「2017年の正月からの経過日数」の場合

「年」に対する日数の加算はそのままでかまいません。
countは2017年の正月からの経過日数ですので、曜日テーブルも2017年用を使えばいいです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/10 15:22

    他にもバグってるから、このまま提出しないようにw

    キャンセル

+1

// ここを1ではなく0にする
int count = 1;
// 各年のifの中の以下の部分を
count=count + (year-2017)*365;
count=count + (2018-2017)*365;
count=count + (2019-2017)*365;

// 全てこうする
count = count + day;

以下に、答え合わせ用のコードを置いときます。
この出力結果と同じであれば正解です。

LocalDate date = LocalDate.of(year, month, day);
String formattedDate = date.format(DateTimeFormatter.ofPattern("u:M:d:E", Locale.ENGLISH));
System.out.println(formattedDate + String.format(":(%d/365)", date.getDayOfYear()));

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/10 16:23

    最後LocalDateで良かったのでは?

    キャンセル

  • 2017/11/10 17:15

    全くもってTimeの部分は不要でした。。。
    格好悪いので直しました。

    キャンセル

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

  • ただいまの回答率 90.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    JavaScriptの時刻を更新したい

    下記のコードは時刻を取っているのですがこれをデジタル時計みたいにほっておいても時間が変わっているという風にするにはどうすればいいですか? <!doctype html> <html

  • 解決済

    java 日付の取得と変更について

    javaの日付の取得と変更に関するコードについて質問です 参考書のとおりに、下記のコードを書いて実行してみたのですが 実行してみても、現在の日付から5日後の日付が出力されず、現在

  • 解決済

    javaの入出力について

    年、月、日を順番に入力して、 yyyy年m月d日(曜日)のように、 出力させたいです。 下に日付までの結果を表示させるだけの プログラムを作成しました。 そこで2つ教えていただき

  • 解決済

    java カレンダー作成

    追記:JDKのバージョンは1.6.0_19です。 そして指示によりimportは使用できないようになっています。 コマンドライン引数で年月の値を引き渡し(201604の

  • 解決済

    java カレンダー 土曜日改行

    4/22質問内容を少々修正いたしました。 ?????に何を入れれば土曜日で改行となりますでしょうか? ヒントとして、【int week = cal.get(java.util.

  • 受付中

    サーブレットを直接表示させたい

    前提・実現したいこと スケジュールを登録、更新、削除するwebアプリケーションを作成しています サーブレットの名前をアドレスバーに打ち込んだら直接サーブレットの内容が表示される

  • 解決済

    pythonのTypeErrorをどうにかしたい

    前提・実現したいこと エラーを消したい 発生している問題・エラーメッセージ --- --- --- %5d Traceback (most recen

  • 解決済

    常に今日の日付から一週間分の日付を取得したい

    今日の日付から一週間分の日付を取得したいのですが、どうすればよいでしょうか?

同じタグがついた質問を見る

  • Java

    12186questions

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

  • MacOS(OSX)

    1644questions

    MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。