【问题标题】:if-statement function that returns boolean返回布尔值的 if 语句函数
【发布时间】:2020-09-08 17:52:33
【问题描述】:

用 Java 编写一个实现以下逻辑的函数:你的手机响了。如果您应该回答,则返回 true。通常你会接听,除了早上你只接你妈妈的电话。在所有情况下,如果你睡着了,你就不会回答。

public boolean answerCell(boolean isMorning, boolean isMom, boolean isAsleep)
{
    if (isMom && isMorning && isAsleep)
    {
        return false;
    }
    if ((!isMom) && isMorning && isAsleep)
    {
        return false;
    }
    if (isMorning && isMom && (!isAsleep))
    {
        return true;
    }
    if ((!isMorning) && isMom && isAsleep)
    {
        return false;
    }
    else
    {
        return true;
    }
}

对于我上面编写的代码,我只得到了 63% 的问题覆盖率,我不知道为什么。我收到的反馈说(假,假,真)是真的,但我期待的是假的。 and (true, false, false) 是真的,但它也应该是假的。

【问题讨论】:

  • 仅从 isAsleep 开始。后面的情况只是 isMorning 和 isMom 的组合。
  • 我不想为你解决这个问题,但我可以给你一个暗示,你让自己很难受。例如,想想你睡着的情况。如果睡着了,你永远不会回答,所以你只需要检查一次那个条件。
  • 啊,我明白了。非常感谢您指出这一点。
  • 您应该能够减少到一个没有任何ifs 的退货声明。否定这个; asleep || (morning && !mom)

标签: java if-statement


【解决方案1】:

简化 if 语句

这是详细的方法,因此您可以了解应该做什么:

public boolean answerCell(boolean isMorning, boolean isMom, boolean isAsleep){
    if(isAsleep){
        return false;
    }else{
        if(isMorning){
            if(isMom){
                return true;
            }else{
                return false;
            }
        }else{
            return true;
        }
    }
}

但是你可以用一行 If 语句来做:

public boolean answerCell(boolean isMorning, boolean isMom, boolean isAsleep){
    return isAsleep?false:isMorning?isMom:true;
}

如果您需要有关单行 if 语句的更多信息,您可以查看 this resource,尽管网上有很多信息。

【讨论】:

    【解决方案2】:

    尽量不要将所有条件分解成一条语句。一步一步解决问题。

    通常你会回答,

    return true;
    

    除了早上你只接听你妈妈的电话。

    if (isMorning) {
        if (isMom) {
            return true;
        }
        else {
            return false;
        }
    } 
    return true;
    

    在所有情况下,如果你睡着了,你就不会回答。

    if (isAsleep) {
        return false;
    }
    if (isMorning) {
        if (isMom) {
            return true;
        }
        else {
            return false;
        }
    } 
    return true;
    

    【讨论】:

      【解决方案3】:
      public boolean answerCell(boolean isMorning, boolean isMom, boolean isAsleep) {
                  
              if(isAsleep==true)
              {           
                  return false;
              }
              else if( (isMorning ==false) && (isMom==false) && (isAsleep==false))
              {
                  
                  return true;
              }
              else if( (isMorning ==true) && ((isMom==true) ))
              {
                  
                  return true;
              }
              else if( (isMorning ==true) && ((isMom==false) ||(isAsleep==false)))
              {
                  
                  return false;
              }
              else
              {       
                  return true;
              }       
          }
      

      【讨论】:

      • 欢迎来到 StackOverflow!只是一些考虑:1) if ( variable == true) 结果总是等于 if ( variable ) 一个,对于布尔值; 2) 如果您将if ( isAsleep == true ) 放在代码的开头,很明显,对于所有其他可能性,它将是false,因此没有理由在下一个条件中添加isAsleep == false
      猜你喜欢
      • 2011-04-05
      • 2014-12-19
      • 2021-09-27
      • 2022-12-17
      • 2016-11-08
      • 2012-08-16
      • 2019-10-04
      • 2013-12-12
      • 2015-02-22
      相关资源
      最近更新 更多