1

このプログラムのガイドラインは次のとおりです

問題B:年の日付。目的:Switch構造、ヘルパーメソッドを理解し、番兵値でWhileループを使用します。

月(mm)、または月と日(dd)を整数値として指定した場合に日付を操作するために、Year2012というクラスを作成する必要があります。次のgetメソッドがあります。1)月の名前(9月、6月、5月など)の文字列値を返すMonthName。2)月の日数を返すDaysInMonth。3)序数の年の日付(1〜365の数値、しばしばユリウス日と呼ばれる)を返すDayOfTheYear。ヒント、forループを使用して前の各月の日を追加してから、現在の月の日を追加します。4)DayOfWeekは、月曜日、火曜日など、その日の名前である文字列値を返します。

これらのメソッドの一部は、他のメソッドの「ヘルパー」メソッドとして使用できます。すべてのメソッドは、直接または間接的にswitchステートメントを使用します。各メソッドは、送信された値から戻り値を計算するため、クラス属性はなく、デフォルトのコンストラクターのみがあります。すべてのロジックは、独自のメソッドに含まれている必要があります。(つまり、ロジックに既存のAPIクラスを使用しません。)ユーザーに月と日を要求し、月の名前、月の日数、日を表示するテスターアプリケーションを設計します。この日の週、およびこの日のユリウス日。番兵の値が入力されるまで、Whileループを使用して日付を処理するプログラムを作成します。プログラムを複数回実行して異なる日をテストしますが、1月1日、4月18日、8月2日、11月28日、12月15日の5つの日付を使用して最終実行を行います。

このプログラムの特定の部分で問題が発生しています。具体的には、ユリウス日メソッドとdayofTheWeekメソッドを使用します。ユリウス日は1を出力し続け(私は多くの日付をテストしていません)、dayofTheWeekメソッドのヘルパーメソッドです。私のコードを見て、私の問題が何であるかを確認できますか?

    public String monthName(int month)
    {
        String mon = null;
        switch (month)
        {
            case 1:
                mon = "January";
                break;
            case 2:
                mon = "February";
                break;
            case 3:
                mon = "March";
                break;
            case 4:
                mon = "April";
                break;
            case 5:
                mon = "May";
                break;
            case 6:
                mon = "June";
                break;
            case 7:
                mon = "July";
                break;
            case 8:
                mon = "August";
                break;
            case 9:
                mon = "September";
                break;
            case 10:
                mon = "October";
                break;
            case 11:
                mon = "November";
                break;
            case 12:
                mon = "December";
                break;
            default:
                mon = "Inccorect entry";
                break;
        }
        return mon;
    }

    public int daysInMonth(int month)
    {
        int days = 0;
        switch (month)
        {
            case 1:
                days = 31;
                break;
            case 2:
                days = 28;
                break;
            case 3:
                days = 31;
                break;
            case 4:
                days = 30;
                break;
            case 5:
                days = 31;
                break;
            case 6:
                days = 30;
                break;
            case 7:
                days = 31;
                break;
            case 8:
                days = 31;
                break;
            case 9:
                days = 30;
                break;
            case 10:
                days = 31;
                break;
            case 11:
                days = 30;
                break;
            case 12:
                days = 31;
                break;
            default:
                days = 0;
        }
        return days;
    }

    public int dayOfTheYear(int month, int day)
    {
        int julian = 0;
        for (int count = 1; count == month; count++)
        {
            julian += daysInMonth(count);
        }
        return julian;
    }

    public String dayOfWeek(int month, int day)
    {
        int daysSoFar = dayOfTheYear(month, day);
        int weekDay = daysSoFar % 7;
        String dayName = null;

        switch (weekDay)
        {   
            case 1:
                dayName = "Sunday";
                break;
            case 2:
                dayName = "Monday";
                break;
            case 3:
                dayName = "Tuesday";
                break;
            case 4:
                dayName = "Wednesday";
                break;
            case 5:
                dayName = "Thursday";
                break;
            case 6:
                dayName = "Friday";
                break;
            case 7:
                dayName = "Saturday";
                break;
            default:
                dayName = "Incorrect entry";
        }
        return dayName;     
    }

    public static void main(String[] args)
    {
        Scanner keyboard = new Scanner(System.in);
        Year2012 year = new Year2012();
        System.out.println("Please enter a month using integers (Jan = 1): ");
        int month = keyboard.nextInt();
        System.out.println("Please enter a day within that month: ");
        int day = keyboard.nextInt();

        System.out.println("Month: " + year.monthName(month));
        System.out.println("Number of days in month: " + year.daysInMonth(month));
        System.out.println("Day of the week: " + year.dayOfWeek(month, day));
        System.out.println("Julian date: " + year.dayOfTheYear(month, day));

    }
}
4

3 に答える 3

3

ジュリアン値の計算にはいくつかの問題があります。これを試して:

public int dayOfTheYear(int month, int day)
{
    int julian = 0;
    for (int count = 1; count < month; count++) //note this loop will not run for Jan(as the logic below will cover that
    {
        julian += daysInMonth(count);
    }
    julian += day;
    return julian;
}

このループでは、count == month の代わりに count < month を使用し、入力から日数を加算してから回答を返します。

このループは 1 月には実行されないことに注意してください。1 月の場合は、入力した日数を追加するだけです。

于 2013-03-14T17:41:48.837 に答える
3

ジュリアン値を設定する for ループで間違っています。これを試して:

int julian = 0;
for (int count = 1; count < month; count++)
{
julian += daysInMonth(count);
}
return julian + day;

このループでは、 count == monthの代わりにcount < monthを使用しています。また、 julian + dayも返します。

于 2013-03-14T17:38:18.063 に答える
2

for ループの条件はcount == month.

public int dayOfTheYear(int month, int day)
{
    int julian = 0;
    for (int count = 1; count == month; count++)
    {
        julian += daysInMonth(count);
    }
    return julian;
}

これは、ループ本体がmonth入力が 1 の場合にのみ実行され、その後は 1 回だけ実行されることを意味します。ということcount < monthですか?

于 2013-03-14T17:38:35.467 に答える