Java 分离;如有其他",;声明
我需要的是知道如何将这两个部分拆分为if-else部分Java 分离;如有其他",;声明,java,if-statement,Java,If Statement,我需要的是知道如何将这两个部分拆分为if-else部分 public static int NextBday(int Bdays, int days){ int daysleft = 0; if (days > Bdays) { daysleft= (365+Bdays) - days; }else if(Bdays > days){ daysleft= Bdays-days; }if (Bda
public static int NextBday(int Bdays, int days){
int daysleft = 0;
if (days > Bdays) {
daysleft= (365+Bdays) - days;
}else if(Bdays > days){
daysleft= Bdays-days;
}if (Bdays == days + 1) {
System.out.println("\nWow, your birthday is tomorrow!");
}else if (Bdays == days){
System.out.println("\nHappy birthday!");
}
System.out.println("\nYour birthday is in " +daysleft+ " days");
return daysleft;
如果你不能从混乱中分辨出我想要的是将If语句分成两个不同的部分,但仍然使用相同的方法。我需要做些什么才能使第二个if-else语句能够自己打印,而不必显示还剩多少天
e、 g.“哇,你的生日就在明天!”没有“你的生日还有1天”
和“生日快乐”
如果没有“您的生日在0天后”
保持简单最有帮助。有人需要完整的代码吗?如果有人感到困惑,我可以尝试用不同的措辞来回答这个问题。非常感谢所有帮助我们的人 首先检查==案例,如果==案例为真,则仅检查其他两个案例(如果两者都不存在)。最简单的解决方案是添加return;最后两种if()情况中的语句:
public static int NextBday(int Bdays, int days){
int daysleft = 0;
if (days > Bdays) {
daysleft= (365+Bdays) - days;
}else if(Bdays > days){
daysleft= Bdays-days;
}
if (Bdays == days + 1) {
System.out.println("\nWow, your birthday is tomorrow!");
}else if (Bdays == days){
System.out.println("\nHappy birthday!");
} else
System.out.println("\nYour birthday is in " +daysleft+ " days");
return daysleft;
Paul Tomblin的答案更清晰。这听起来像是家庭作业,所以我会有点含糊,而不仅仅是给你答案 试着用英语描述函数的方式来思考代码。然后把它变成伪代码,然后变成真代码 “如果今天是某人的生日,就说生日快乐。或者,如果他们的生日是明天,就说‘哇’。否则就说离他们的生日还有多少天。” 伪代码:
if birthdayToday
print happy birthday message
otherwise if birthdayTomorrow
print wow message
otherwise
print days remaining message
最后一步留给读者作为练习。我会这样做,因为最可能的情况是(>1),所以我们将该选项放在第一个选项中
int diff = Bdays - days;
if (diff > 1){
System.out.println("\nYour birthday is in " +diff+ " days");
}
else if (diff == 1){
System.out.println("\nWow, your birthday is tomorrow!");
}
else{
System.out.println("\nHappy birthday!");
}
如果(diff<0)diff+=365,我想你需要
代码>或类似。是的,我只关注指定的if部分。-1;像这样重新排序是过早的优化。相反,使用“最可能”作为排序的理由是错误的;我们首先处理的案例是:(i)如果有区别的话,可以简化逻辑的其余部分;或者(ii)如果做不到这一点,则是更有趣的问题——因为这些问题应该引起代码读者的注意;特殊情况是特殊的。让编译器担心重新排序(即使编译器是javac
)。这有什么不成熟之处?你的反对是荒谬的。最有可能的情况当然应该首先评估,特别是如果它是这里的363.2425倍。我看不出编译器是如何推断特定领域知识的。重新排序不会降低可读性,也不会影响您提到的其他事项。你应该在任何调用NextBday()的地方进行打印逻辑
int diff = Bdays - days;
if (diff > 1){
System.out.println("\nYour birthday is in " +diff+ " days");
}
else if (diff == 1){
System.out.println("\nWow, your birthday is tomorrow!");
}
else{
System.out.println("\nHappy birthday!");
}
if(Bdays - days != 1 && Bdays != days){ //if it's not today or tomorrow
int daysleft;
System.out.println("\nYour birthday is in " + (daysleft = (int)((days > Bdays)?(365+Bdays-days):(Bdays-days))) + " days."); //print the message, and calculate the correct number of days on the spot
return daysleft;
}
else{ //if it is today or tomorrow
System.out.println(((Bdays == days)?"\nHappy Birthday!":"\nWow, your birthday is tomorrow!")); //If it's today, print happy birthday, if it's not today it must be tomorrow.
return Bdays - days;
}
public static int NextBday(int Bdays, int days){
int daysleft = getDaysLeft(Bdays,days);//move logic to a private function
if (daysleft == 1)
System.out.println("\nWow, your birthday is tomorrow!");
else if (daysleft == 0)
System.out.println("\nHappy birthday!");
else
System.out.println("\nYour birthday is in " +daysleft+ " days");
return daysleft;
}
private static int getDaysLeft(int Bdays, int days) {
if (days > Bdays)
return (365 + Bdays) - days;
return Bdays - days; //no need to check for the < condition
}
public static int NextBday(int Bdays, int days) {
int daysleft = days > Bdays ? 365 + Bdays - days : Bdays - days;
if (daysleft == 1)
System.out.println("\nWow, your birthday is tomorrow!");
else if (daysleft == 0)
System.out.println("\nHappy birthday!");
else
System.out.println("\nYour birthday is in " + daysleft + " days");
return daysleft;
}