【问题标题】:Javabat Help: alarmClockJavabat 帮助:闹钟
【发布时间】:2012-01-19 11:37:47
【问题描述】:

我正在处理 JavaBat 问题,但对我的逻辑感到困惑。

这是任务:

给定一周中的某一天,编码为 0=Sun、1=Mon、2=Tue、...6=Sat 和 一个布尔值,指示我们是否正在度假,返回一个字符串 表格“7:00”指示闹钟何时响起。平日里, 闹钟应该是“7:00”,周末应该是“10:00”。除非 我们正在度假 - 那么在工作日应该是“10:00”并且 周末应该“关闭”。

alarmClock(1, false) → "7:00" alarmClock(5, false) → "7:00" 闹钟(0,假)→“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" "off" X
alarmClock(6, false) → "10:00" "off" X

当然,这条线涵盖了它?

if (day >=1 && day

【问题讨论】:

    标签: java


    【解决方案1】:

    这个怎么样?

          public String alarmClock(int day, boolean vacation) {
                if (day >=1 && day <=5) {
                    return vacation ? "10:00" : "7:00";
                } else {
                    return vacation ? "off" : "10:00";
                }  
            }
    

    请注意,这取决于您的编码约定是否允许使用四元运算符。但在这种情况下,我认为逻辑更容易阅读。

    【讨论】:

      【解决方案2】:

      当然,这条线涵盖了它?

      if ((day >=1 && day <=5) && (!vacation)) 
      

      不,那条线没有覆盖它。如果这一天是星期日或星期六(0 或 6),则“和”表达式 (day &gt;=1 &amp;&amp; day &lt;=5) 的第一部分将为假,因为 0 和 6 不在 1 和 5 之间。

      处理 06 天的唯一分支是您的 else 分支:“off”。

      现在是使用辅助方法来表达更接近英文描述的逻辑的好时机:

      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*/;
      }
      

      【讨论】:

      • 这是为什么呢?我将声明 (day >=1 && day
      • @user:&lt;= 表示“小于或等于”。你认为 6 是“小于或等于”5 吗?
      【解决方案3】:

      虽然三元运算符在这里很有用,因为这个问题可以在单个 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";
      }
      

      【讨论】:

        【解决方案4】:
        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";
        

        【讨论】:

          【解决方案5】:
          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";
            }
          
          
          
          
          }
          

          【讨论】:

          • 你能补充一些解释吗?
          • 当然这是低质量的,但它是试图回答这个问题,所以我将其标记为 OK。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-07-21
          • 2011-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多