我正在处理JavaBat问题,并对我的逻辑感到困惑。
这是任务:
假设一周中的某一天编码为0 =太阳,1 =星期一,2 =星期二,... 6 =星期六, 一个布尔值,指示我们是否正在度假,返回一个字符串 形成“7:00”,表示闹钟响铃的时间。平日里, 警报应该是“7:00”,周末应该是“10:00”。除非 我们正在度假 - 然后在工作日它应该是“10:00”和 周末它应该“关闭”。
alarmClock(1,false)→“7:00”alarmClock(5,false)→“7:00” alarmClock(0,false)→“10:00”
这是我的代码:
public String alarmClock(int day, boolean vacation) {
if ( (day >=1 && day <=5) && (!vacation)) {
return "7:00";
} else if ( (day >=1 && day <=5) && (vacation)) {
return "10:00";
} else {
return "off";
}
}
为什么这两个测试失败?
alarmClock(0,false)→“10:00”“关闭”X
alarmClock(6,false)→“10:00”“off”X
当然,这条线涵盖了它?
if(day&gt; = 1&amp;&amp; day&lt; = 5)&amp;&amp; (!假期))
答案 0 :(得分:3)
public String alarmClock(int day, boolean vacation) {
if (day >=1 && day <=5) {
return vacation ? "10:00" : "7:00";
} else {
return vacation ? "off" : "10:00";
}
}
请注意,如果您的编码约定允许使用迂回操作符,则它取决于它。但在这种情况下,我认为逻辑更容易阅读。
答案 1 :(得分:1)
当然,这条线涵盖了它?
if ((day >=1 && day <=5) && (!vacation))
不,那条线不能覆盖它。如果日期是星期日或星期六(0或6),则“和”表达式(day >=1 && day <=5)
的第一部分将为false,因为0和6不在1和5之间(包括1和5)。
处理天0
和6
的唯一分支是您的else
分支:“关闭”。
这是一个使用辅助方法来表达你的逻辑更接近英文描述的好时机:
if ( isWeekday(day) ) {
if ( vacation ) {
//what to return here?
} else {
//what to return here?
}
} else {
if ( vacation ) {
//what to return here?
} else {
//what to return here?
}
}
然后你只需要实现isWeekday
:
private boolean isWeekday(int day) {
return /*fill this in*/;
}
答案 2 :(得分:0)
尽管三元运算符在这里很有用,因为这个问题可以在一个return语句中完成,下面的代码允许以下代码。
public String alarmClock(int day, boolean vacation) {
if(vacation){ //if we are on vacation
if(day > 0 && day < 6){ //if it is weekday and we are on vacation
return "10:00";
}
else return "off"; //it must be the weekend!
}
//from here on out all the cases where vacation is true have been weeded out
if(day > 0 && day < 6){
return "7:00";
}
else return "10:00";
}
答案 3 :(得分:0)
if ((day == 0 || day == 6) && (!vacation) || (day >= 1 && day <= 5) && (vacation)) {
return "10:00";
}
if ((day >= 1 && day <= 5) && (!vacation)) {
return "7:00";
}
return "off";
答案 4 :(得分:-1)
public String alarmClock(int day, boolean vacation) {
if (((day==0)||(day==6))&&(!vacation)){
return "10:00";
}
else if (((day!=0)||(day!=6))&&(!vacation)){
return "7:00";
}
else if (((day==0)||(day==6))&&(vacation)){
return "off";
}
else{
return "10:00";
}
}