-1

わからない質問があります , ありがとうございます: ユーザーに今日の曜日を表す整数を入力するよう求めるプログラムを作成してください (日曜日は 0 、月曜日は 1 、...そして土曜日は 6 です)。 . また、ユーザーに、将来の日付として今日からの日数を入力し、将来の曜日を表示するように求めます。実行例を次に示します。 今日の日を入力してください: 1 今日から経過した日数を入力してください:3 今日は月曜日で未来の日は木曜日です 私の試みは:

Scanner input = new Scanner(System.in);

System.out.print("Enter today's day (0 - 6):  ");
int day = input.nextInt();

System.out.print("Enter the number of days elapsed since today:  ");
int elapsed = input.nextInt();

if(day == 0)
{
    System.out.println("Sunday");
}
if(day   == 1)
{
    System.out.println("Monday");
}
if(day ==  2)
{
    System.out.println("Tuesday");
}
if(day  == 3)
{
    System.out.println("Wednesday");
}
if(day  ==  4)
{
    System.out.print("Thursday");
}
if(day ==  5)
{
    System.out.print("Friday");
}
if(day  == 6)
{
    System.out.print("Saturday");
}

System.out.print("Today is " + day + " and the future day is " + elapsed);
4

6 に答える 6

2

day-number to day-string が 2 回必要なので、別の関数に入れます。いくつかの可能なアプローチを示したいと思います。バージョン 1、ベーシック、シンプル、整頓:

// isolate the daynumber --> daystring in a function, that's tidier
String dayFor (int daynumber) {
    String dayAsString = "ERROR";  // the default return value
    switch(dayNumber) {
        case 0 :
            dayAsString = "Sunday";
            break;
        case 1 :
            dayAsString = "Monday";
            break;
        // and so on, until
        case 6 :
            dayAsString = "Saturday";
            break;
     }
     return dayAsString;
}

switch ステートメントの代わりに配列を使用する、はるかに短いバージョン:

String dayFor (int daynumber) {
    String dayStrings[] = new String[]{"Sunday","Monday", .... "Saturday"};
    // notice that daynumber's modulo is used here, to avoid index out of
    // bound errors caused by erroneous daynumbers:
    return dayStrings[daynumber % 7];
}

次の関数のように、各ケースがすぐに返されるように試してみたいと思うかもしれませんが、複数の return ステートメントを使用することはお勧めできません。技術的には可能で、時々遭遇するので、ここに表示するだけです

String dayFor (int daynumber) {
    switch(dayNumber) {
        case 0 :
            return "Sunday";
        case 1 :
            return "Monday";

        // and so on, until

        case 6 :
            return "Saturday";
     }
     // normally not reached but you need it because the compiler will
     // complain otherwise anyways.
     return "ERROR";
}

このかなり長いイントロの後、主な機能は短くシンプルになります。入力後、必要なのは次のとおりです。

// present day + elapsed modulo 7 = the future day
int future = (day + elapsed) % 7;
System.out.print("Today is " + dayFor(day) + " and the future day is " + dayFor(future) );

入力をチェックするコードを追加することを忘れないでください!

于 2012-10-21T00:17:11.220 に答える
1

この質問では、1 ~ 7 (従来型) ではなく、0 ~ 6 の範囲の日数が表示されます。たとえば、今日が 1 日 (月曜日) で、今日からの経過日数が 3 の場合、その日は木曜日になります。この質問には最初の日が含まれているため、結果の日は 1 (月曜日)、2、3 (水曜日) が経過した後、つまり木曜日になります。

例を挙げて、以下のコードに適用してみましょう。

日 = 1;

日削除 = 3;

else if(day > 0 && day < 7) 、その場合

{

合計 = 1(日) + 3(経過日数); // 合計 = 4

}

sum が 0 ~ 6 の範囲の場合、各日に対応する各 if ケースを作成できます。上記の場合、合計は 6 未満であるため、独自の if 句があります。たとえば、days = 1 で daysElapsed = 6 のように合計が大きかった場合、sum = 1(days) + 6(daysElapsed) = 7 となります。

この場合、if(sum > 6), then sum = sum % 7 = 7 % 7 = 0 = Sunday という句に一致します。これは、1(月曜日)から6(土曜日)までの日数が経過したことを意味するので、その日は日曜日(0)になります。

if(day == 0) // If the present day entered is Zero(0 is for Sunday)
{
    sum = daysElapsed;    // daysElapsed will be entered by the user
}

else if(day > 0 && day < 7)    // If the present day is > 0 but < 7 (1 - 6 days)
{
    sum = day + daysElapsed;    // 
}

if(sum>6)    // if 0<= sum <=6 , 6 if cases can be created. If sum > 6 :
{
    sum = sum % 7;
}

if(sum == 0)
{
    System.out.println("Day is Sunday.");
}
.
.
.
.
else if(sum == 6)
{
    System.out.println("Day is Saturday.");
}
于 2015-04-27T01:51:40.470 に答える
0
package javaapplication2;

import java.util.Scanner;
public class JavaApplication2 {


    public static void main(String[] args) {

    int day, eday, fday;
        String str, str1;
        Scanner S = new Scanner(System.in);
        System.out.println("Enter today's day: ");
        day = S.nextInt();
        System.out.println("Enter the number of days elapsed since today: ");
        eday = S.nextInt();
        if (day == 0) {
            str = "Sunday";
            System.out.print("Today is " +str + " and ");
        }
        else if (day == 1) {
            str = "Monday";
            System.out.print("Today is " +str + " and ");
        }
        else if (day == 2) {
            str = "Tuesday";
            System.out.print("Today is " +str + " and ");
        }
        else if (day == 3) {
            str = "Wednesday";
            System.out.print("Today is " +str + " and ");
        }
        else if (day == 4) {
            str = "Thursday";
            System.out.print("Today is " +str + " and ");
        }
        else if (day == 5) {
            str = "Friday";
            System.out.print("Today is " +str + " and ");
        }
        else if (day == 6) {
            str = "Saturday";
            System.out.print("Today is " +str + " and ");
        }

       fday = day + eday;

       if (fday % 7 == 0) {
            str1 = "Sunday";
            System.out.print("Future day is " +str1);
        }
        else if (fday % 7 == 1) {
            str1 = "Monday";
            System.out.print("Future day is " +str1);
        }
        else if (fday % 7 == 2) {
            str1 = "Tuesday";
            System.out.print("Future day is " +str1);
        }
        else if (fday % 7 == 3) {
            str1 = "Wednesday";
            System.out.print("Future day is " +str1);
        }
        else if (fday % 7 == 4) {
            str1 = "Thursday";
            System.out.print("Future day is " +str1);
        }
        else if (fday % 7 == 5) {
            str1 = "Friday";
            System.out.print("Future day is " +str1);
        }
        else if (fday % 7 == 6) {
            str1 = "Saturday";
            System.out.print("Future day is " +str1);
        }

    }
于 2016-03-09T20:19:51.340 に答える
0

配列を使用して曜日名を格納すると、より適切に実行できます。

String[] dayNames = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

ユーザー入力をインデックスとして使用できるようになりました

int nameIndex = //... get input
//validate input
//dayNames[nameIndex] is the day of the week

追加する日数の入力を取得します

int numDays = //...get input

次に、その日数を追加して、将来の曜日のインデックスを計算します

int futureNameIndex = nameIndex; //start with entered day of week index
for(int i=0; i<numDays; i++) {
    futureNameIndex++; //increment by 1 for numDays times
    if(futureNameIndex == dayNames.length) { //if the index reaches lenght of the array
        futureNameIndex = 0;                 //reset it to 0
    }
}

その方が分かりやすいと思います。ついに

//dayNames[futureNameIndex] is the future day of week.
于 2012-10-21T00:13:23.180 に答える