0

私はこの質問に行き詰まっています。

2 つの日付 (月と日のみ) を入力し、2 つの日付の間の日数を表示するプログラムを作成してください。2 つの日付が 2013 年内にあると仮定します。プログラムは、入力された各日付を検証して、その日が 1 からその月の最大日数までの間にあるかどうかを確認する必要があります。配列を使用して、1 か月あたりの最大日数を格納し、経過した日数を出力します。

同僚/知人が私のコードをコピーした経験があるため、コードを削除しました。

January 1問題は、最初の日付と2 番目の日付として入力するたびに、実際の答えが90 日であるのに31 日April 1しか出力されないことです。誰でも助けることができますか?編集:今のところ正常に動作しています。助けてくれた人に感謝します。

4

5 に答える 5

2

変化する

for (int count = inputMonth; count > inputMonth2; count++)

for (int count = inputMonth; count < inputMonth2; count++)

于 2013-09-30T09:55:20.813 に答える
0

あなたの論理には欠陥があります。次のようなことをする必要があります:-

int start = 0;
int middle = 0;
int end = 0;
int sum = 0;
...
if (code2 > code) {
    start = Days[code] - inputDay + 1;
    for (int count = inputMonth; count < code2; count++) {
        middle += Days[count];
    }
    end = inputDay2;
} else {
    start = inputDay2 - inputDay + 1;
}

sum = start + middle + end;
于 2013-09-30T10:11:10.153 に答える
0

for ループの条件で、< であるべきときに > が使用されました

for (int count = inputMonth; count < inputMonth2; count++) {
    middle = middle + Days[count];
}

コードに多数の論理エラーが含まれています (たとえば、同じ月に 2 つの日付が使用されるとどうなるか)。以下は動作中のバージョンです。

public static void main(String[] args) {
    String monthStr;
    String dayStr;
    int inputMonth;
    int inputDay;
    String monthStr2;
    String dayStr2;
    int inputMonth2;
    int inputDay2;
    int code;
    int code2;
    int start;
    int middle = 0;
    int end;
    int sum;

    String[] Months = { "January", "February", "March", "April", "May",
            "June", "July", "August", "September", "October", "November",
            "December" };

    int[] Days = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

    monthStr = JOptionPane.showInputDialog(null, "Enter First Month: ");
    inputMonth = Integer.parseInt(monthStr);

    dayStr = JOptionPane.showInputDialog(null, "Enter First Day: ");
    inputDay = Integer.parseInt(dayStr);

    monthStr2 = JOptionPane.showInputDialog(null, "Enter Second Month: ");
    inputMonth2 = Integer.parseInt(monthStr2);

    dayStr2 = JOptionPane.showInputDialog(null, "Enter Second Day: ");
    inputDay2 = Integer.parseInt(dayStr2);

    if (inputMonth == inputMonth2) {
        // Same months
        sum = inputDay2 - inputDay;
    } else {
        // Different months
        start = Days[inputMonth - 1] - inputDay;
        end = inputDay2;
        middle = 0;

        // Start at inputMonth+1, start already included the days remaining
        // in inputMonth
        for (int count = inputMonth + 1; count < inputMonth2; count++) {
            middle = middle + Days[count - 1];
        }
        sum = start + middle + end;
    }
    JOptionPane.showMessageDialog(null, "DAYS COMPUTATION PROGRAM"
            + "\nFirst Date: " + Months[inputMonth - 1] + " " + inputDay
            + "\nSecond Date: " + Months[inputMonth2 - 1] + " " + inputDay2
            + "\nNumber of Days Elapsed: " + sum + " Days");
}
于 2013-09-30T10:12:11.993 に答える
0
public int daysBetween(Date d1, Date d2){
    return (int)( (d2.getTime() - d1.getTime()) / (1000 * 60 * 60 * 24));
 }

from Javaで2つの日付間の日数を取得する

于 2013-09-30T09:56:07.600 に答える