Javabat帮助:alarmClock

时间:2011-12-13 15:39:53

标签: java

我正在处理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; (!假期))

5 个答案:

答案 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)。

处理天06的唯一分支是您的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";
  }




}