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

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

ただいまの
回答率

90.61%

  • Java

    13516questions

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

Calendar

解決済

回答 2

投稿

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

gpsgpsgps

score 14

先日は解答してくださった方、ありがとうございました。
しかしまた同じプログラムで問題点が出てきてしまいました。


import java.util.Scanner; 
import java.util.Calendar; 

class Cale { 
    public static void main(String[] args) { 
        Scanner stdin = new Scanner(System.in); 

        //年を入力 
        int year = stdin.nextInt(); 

        //月を入力 
        int month = stdin.nextInt()-1; 

        //曜日 
        System.out.println(" 日   月   火   水   木   金   土"); 

        //Calendarインスタンスを作成 
        Calendar cal = Calendar.getInstance(); 
        cal.set(Calendar.YEAR, year);       //入力された年 
        cal.set(Calendar.MONTH, month);     //入力された月 
        cal.set(Calendar.DATE, 1);          //カレンダーを1日から始める

//1週目は日曜日から1日の前日(先月の末尾)までは空欄で埋める
        for (int i = Calendar.SUNDAY; i < cal.get(Calendar.DAY_OF_WEEK); i++) {
            System.out.print("     ");
        }

        //カレンダーが当月の間、表示する(翌月まで進んだら終わり)
        while (month == cal.get(Calendar.MONTH)) {

            //2桁に埋めて出力する(1桁と2桁があるとずれてしまうので)
            System.out.printf(" %2d  ", cal.get(Calendar.DATE));

            //土曜日の場合には改行する(翌週へ)
            if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
                System.out.print("\n");
            }

            //一日加算する
            cal.add(Calendar.DATE, 1);
        }
    }
}

これで実行できるのですが、while文の中の、

//2桁に埋めて出力する(1桁と2桁があるとずれてしまうので)
System.out.printf(" %2d  ", cal.get(Calendar.DATE));

の部分を、if分をつかって

if(/*条件式*/){
    System.out.print(" " + cal.get(Calender.DATE) + "  ");
    }else{
    System.out.print(" " + cal.get(Calender.DATE) + " ");
    }

のように書き換えたいのですが(一桁の時と二桁の時で空白を場合分け)
条件式がうまくいきません。どのようにしたらよいでしょうか。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

0

条件式はtakotakotさんのとおりなのですが,その後の処理が疑問です.
あなたのコードだと,日付が入った「あと」のスペースの数が違います.
System.out.printf(" %2d  ", cal.get(Calendar.DATE)); 
これは数値を,不足分の桁を空白で埋めて2桁(以上)で表示するというもので,
数値の桁によって空白の数が変わるのは数値の「前」です.なので,
if(cal.get(Calender.DATE) < 10){ //一桁の場合,日付の前の空白は2つ
    System.out.print("  " + cal.get(Calender.DATE) + " "); 
}else{ //二桁の場合,日付の前の空白は1つ
    System.out.print(" " + cal.get(Calender.DATE) + " "); 
} 
日付の前で空白の数を調整しないと合いません.

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

cal.get(Calendar.DATE) を 9以下(10未満)かどうかで if 文を書けば、つまり
if(cal.get(Calendar.DATE) < 10) {
}else{
}
ではだめなのでしょうか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

  • 解決済

    java Calendar

    javaでプログラムを作成しました。 教本を見ながらやってみたのですが、うまくいきません。 import java.util.Scanner; import java.util.

  • 受付中

    [java][日付チェック]質問

    java初心者です。 テキストファイルを一行づつ読み込んで行く時に、 32日や14月など、異常な日付が紛れていた場合例外として処理する方法はありますでしょうか? while ((

  • 解決済

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

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

  • 解決済

    javaの入出力について

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

  • 受付中

    javaである期間の経過年月日時分秒を算出したい

    下記のようなStringで与えられる年月日時分秒 "2014/12/20 23:45:23"と 現在の時刻を比較し、 与えられた時刻から現在までyy年mmか月dd日 hh時間

  • 解決済

    java カレンダー作成

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

  • 解決済

    java カレンダー 土曜日改行

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

  • 解決済

    乱数が羅列されているテキストファイルを読み込んで最大値と最小値を出力したいが正しい結果が得られない

    乱数が500個羅列されているテキストファイルを読み込んで最大値と最小値を出力したいのですが正しい結果が得られません。ちなみに乱数の範囲は5~1000です。全部で500個です。 以

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

  • Java

    13516questions

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