Java(使用if else语句查找未来日期)

我有一个问题,我无法弄清楚,谢谢:编写一个程序,提示用户输入一周的当天的整数(星期日是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); 

由于您需要将day-number到day-string两次,请将其放在单独的函数中。 我想向您展示几种可能的方法。 版本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"; } 

在这个相当长的介绍之后,主要function变得简短而简单。 输入后您只需要:

 // 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) ); 

不要忘记添加代码来检查您的输入!

这个问题给你的时间范围从0到6,而不是1-7(常规)。 现在,例如,如果今天是1(星期一),而今天的天数是3,那么这一天应该是星期四。 由于此问题具有包含的初始日期,因此结果日期将在1(星期一),2,3(星期三)过后,即星期四。

我们举一个例子并将其应用于下面的代码。

day = 1;

daysElased = 3;

否则if(day> 0 && day <7),情况就是这样

{

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

}

如果sum在0-6的范围内,则可以根据每一天创建每个if case。 在上面的例子中,总和小于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."); } 

问题来自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变量中存储的数字相同(通过执行上述数学运算获得)。

您可以通过使用数组来存储日期名称来更好地完成此操作。

 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 

我想你会发现一个更容易理解。 最后

 //dayNames[futureNameIndex] is the future day of week. 

据我所知,这个问题来自“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()的唯一区别; 使用这种方法,这个不打印在新行上,它打印在我们需要的同一行。 修补它以便更好地理解。

 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); } }