-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

由于您需要天数到日期字符串两次,因此将其放在单独的函数中。我想向您展示几种可能的方法。版本 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];
}

尝试使用以下函数的方式可能很诱人,其中每个 case 立即返回,但不鼓励使用多个 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

该问题为您提供了从 0 到 6 的天数,而不是 1-7(常规)。现在,例如,如果今天是 1(星期一)并且从今天开始经过的天数是 3,那么这一天应该是星期四。由于此问题包含初始日期,因此结果日期将在 1(星期一)、2、3(星期三)过去之后,即星期四。

让我们举个例子,并将其应用到下面的代码中。

天 = 1;

daysElased = 3;

else if(day > 0 && day < 7) ,就是这样

{

sum = 1(day) + 3(daysElapsed); // 总和 = 4

}

如果 sum 在 0-6 的范围内,则可以创建每个 if 案例对应的每一天。在上述情况下,总和小于 6,因此它将有自己的 if 子句。如果总和更大,例如,days = 1 和 daysElapsed = 6,那么 sum = 1(days) + 6(daysElapsed) = 7。

在这种情况下,它将匹配子句 if(sum > 6),然后 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

您可以通过使用数组来存储日期名称来做得更好。

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 回答
0

据我所知,这个问题来自“Java 编程简介”一书。在问这个问题的地方,你对方法、循环、数组等一无所知,所以我只会使用选择。

在这里,当我尝试用更好的方法解决时,我找不到任何方法,因为我们无法使用可能非常有用的数组或更好的方法。这就是为什么这个问题在书中有点多余。

而且你真的不应该使用 if 语句,因为 switch 在这种情况下要好得多。

    System.out.println("Enter today's number (0 for Sunday, 1 for Monday...) :");
    int todayNo = in.nextInt();

    System.out.println("Enter the number of days elapsed since today:");
    int elapsedDay = in.nextInt();

    int futureDay = (todayNo + elapsedDay) % 7;

    switch (todayNo) {
        case 0:
            System.out.print("Today is Sunday and");
            break;
        case 1:
            System.out.print("Today is Monday and");
            break;
        case 2:
            System.out.print("Today is Tuesday and");
            break;
        case 3:
            System.out.print("Today is Wednesday and");
            break;
        case 4:
            System.out.print("Today is Thursday and");
            break;
        case 5:
            System.out.print("Today is Friday and");
            break;
        case 6:
            System.out.print("Today is Saturday and");
            break;

    }

    switch (futureDay) {
        case 0:
            System.out.print(" the future day is Sunday.");
            break;
        case 1:
            System.out.print(" the future day is Monday.");
            break;
        case 2:
            System.out.print(" the future day is Tuesday.");
            break;
        case 3:
            System.out.print(" the future day is Wednesday.");
            break;
        case 4:
            System.out.print(" the future day is Thursday.");
            break;
        case 5:
            System.out.print(" the future day is Friday.");
            break;
        case 6:
            System.out.print(" the future day is Saturday.");
            break;

    }

在这里,您可能不知道的唯一一件事是 System.out.print();。与 System.out.println() 的唯一区别;使用这种方法,这个不会打印在新行上,它会打印在同一行上,这正是我们在这里需要的。修补它以更好地理解。

于 2015-05-11T10:36:40.220 回答
0

这个问题来自Y. Daniel Liang的一本名为“ Java 编程简介”的书。除了使用字符串类型之外,我相信下一章会介绍;我为此练习编写的解决方案仅使用您迄今为止所学的内容。

import java.util.Scanner;

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

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

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

        int futureDay = (todaysDay + elapsedDays) % 7;
        String day_of_week = "";

        switch (todaysDay) {
            case 0: day_of_week = "Sunday"; break;
            case 1: day_of_week = "Monday"; break;
            case 2: day_of_week = "Tuesday"; break;
            case 3: day_of_week = "Wednesday"; break;
            case 4: day_of_week = "Thursday"; break;
            case 5: day_of_week = "Friday"; break;
            case 6: day_of_week = "Saturday";
        }

        switch (futureDay) {
            case 0:
                System.out.println("Today is " + day_of_week + " and the future day is Sunday."); break;
            case 1:
                System.out.println("Today is " + day_of_week + " and the future day is Monday."); break;
            case 2:
                System.out.println("Today is " + day_of_week + " and the future day is Tuesday."); break;
            case 3:
                System.out.println("Today is " + day_of_week + " and the future day is Wednesday."); break;
            case 4:
                System.out.println("Today is " + day_of_week + " and the future day is Thursday."); break;
            case 5:
                System.out.println("Today is " + day_of_week + " and the future day is Friday."); break;
            case 6:
                System.out.println("Today is " + day_of_week + " and the future day is Saturday.");
        }
    }
}

输出:

Enter today's day: 0
Enter the number of days elapsed since today: 31
Today is Sunday and the future day is Wednesday.

笔记:

  • 第一个 switch 语句将字符串类型的一天分配给变量day_of_week ,该变量稍后用于打印“今天的一天”。

  • 要获得未来的一天,您必须找到今天的总和与经过的天数除以 7 的余数。

  • 最后一个 switch 语句“匹配”一个与futureDay变量中存储的数字相同的案例编号(通过执行上述数学运算获得)。

于 2017-05-28T00:24:15.730 回答
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 回答