Java(使用if-else语句查找未来日期)
我有个问题想不通,谢谢你: 编写一个程序,提示用户输入一周中今天的整数(星期日为0,星期一为1,…星期六为6)。还提示用户输入未来日期的后天数,并显示一周的未来日期。以下是运行示例: 输入今天:1 输入从今天起经过的天数:3 今天是星期一,明天是星期四 我的尝试是:Java(使用if-else语句查找未来日期),java,if-statement,Java,If Statement,我有个问题想不通,谢谢你: 编写一个程序,提示用户输入一周中今天的整数(星期日为0,星期一为1,…星期六为6)。还提示用户输入未来日期的后天数,并显示一周的未来日期。以下是运行示例: 输入今天:1 输入从今天起经过的天数:3 今天是星期一,明天是星期四 我的尝试是: Scanner input = new Scanner(System.in); System.out.print("Enter today's day (0 - 6): "); int day = input.nextInt()
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);
通过使用数组来存储日期名称,您可以做得更好
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
}
}
由于需要两次day number to day字符串,请将其放在单独的函数中。我想向你们展示几种可能的方法。版本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) );
别忘了添加代码来检查输入 该问题给出的天数范围为0-6天,而不是1-7天(常规)。现在,例如,如果今天是1(星期一),并且从今天开始的日期是3,那么这一天应该是星期四。由于此问题的起始日期包括在内,因此产生的日期将在1(星期一)、2、3(星期三)之后,即星期四 让我们举一个例子,并将其应用于下面的代码 日=1 daysElased=3 否则,如果(天>0&&天<7),情况如何 { sum=1(天)+3(天选择);//sum=4 } 如果总和在0-6范围内,则可以根据每天创建每个If案例。在上述情况下,总和小于6,因此它将有自己的if子句。如果总和更大,例如,天=1和daysElapsed=6,那么总和=1(天)+6(daysElapsed)=7 在这种情况下,它将匹配子句if(sum>6),然后sum=sum%7=7%7=0=Sunday。这意味着从1(星期一)到6(星期六)的日期已经过去,因此这一天将是星期日(0)
if(day==0)//如果输入的当前日期为零(0表示星期日)
{
sum=daysElapsed;//用户将输入daysElapsed
}
else if(天>0&&day<7)//如果当前天>0但<7(1-6天)
{
总和=天+天选择的天数;//
}
if(sum>6)//if 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()的唯一区别;用这种方法,它不会打印在新行上,而是打印在同一行上,这就是我们需要的。修改它以更好地理解。这个问题来自Y.Daniel Liang的《Java编程入门》一书。除了使用字符串类型之外,我相信这将在下一章中介绍;我为本练习编写的解决方案只使用了到目前为止所教的内容
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);
}
}
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.
注意事项:
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指定一个字符串类型的day,该变量稍后用于打印“今天”
- 要获得未来的一天,您必须找到今天和经过的天数之和除以7的剩余部分
- 最后一个switch语句“匹配”一个案例编号,该编号与存储在futureDay变量中的编号相同(通过执行上述数学运算获得)
if(day==0)System.out.println(“星期日”);如果(天==1)System.out.println(“星期一”);如果(天==2)System.out.println(“星期二”);如果(天==3)System.out.println(“星期三”);如果(天==4)系统输出打印(“星期四”);如果(天==5)系统输出打印(“星期五”);如果(天==6)系统输出打印(“星期六”);我认为是第%7天,但我在哪里可以使用它来编辑你的问题。如果用户在周一运行应用程序并输入其他内容(例如周五),该怎么办?@fvu:你说得对。我在你的评论中看到了这一点,所以刚刚添加了另一种(我想是天真的)方法,这肯定比你建议的%
操作要详细得多。同意。如果你能为你的答案和逻辑提供一些解释,而不仅仅是简单的解释,那就太好了code@hawk:这些评论很有帮助。你能详细说明一下这是如何回答这个问题的吗?
Enter today's day: 0
Enter the number of days elapsed since today: 31
Today is Sunday and the future day is Wednesday.