两个编码片段的差异

时间:2015-03-03 16:18:51

标签: java

我正在使用CodingBat Java练习Java。我目前正在解决这个问题:

  

我们有一只吵闹的鹦鹉。 "小时"参数是当前小时时间,范围为0..23。如果鹦鹉是,我们有麻烦   说话,小时是在7点之前或者在20点之后。如果我们在,我们会回来   麻烦。

parrotTrouble(true, 6) → true
parrotTrouble(true, 7) → false
parrotTrouble(false, 6) → false

我输入的代码与预期答案不同。但是当我看到预期的答案时,我想弄清楚为什么我的答案是不可接受的。这是一个微不足道的问题,但我在Java中生锈了。任何人都可以关注一下,告诉我为什么我的答案不被接受,或者他们的代码是否有问题,我没有抓到?

我的代码:

public boolean parrotTrouble(boolean talking, int hour) {
  for (hour = 0; hour <= 23; hour++)
  {
     if(hour < 7 || hour > 20)
     {
        talking = true;
     }
     else
     {
        return false;
     }
  }
  return talking;
}

预期答案:

public boolean parrotTrouble(boolean talking, int hour) {
  return (talking && (hour < 7 || hour > 20));
  // Need extra parenthesis around the || clause
  // since && binds more tightly than ||
  // && is like arithmetic *, || is like arithmetic +
}

4 个答案:

答案 0 :(得分:4)

该函数有两个参数,talkinghour。代码所做的第一件事就是将hour设置为0.这意味着在决定应该返回什么值时,代码完全忽略了它的一个参数。

答案 1 :(得分:2)

  • 这是不可接受的,因为它的作用太多,这使得它更难阅读。
  • 这是不可接受的,因为您不必遍历所有时间,您已经知道它们,但不是使用正确的值,而是将小时设置为0,然后循环到23。

请注意,写作没有意义

if(boolean)
{
    boolean = true;
}
else
{
    return false;
}
return boolean;

当你可以简单地写return boolean

第一种情况也不会在第二种情况进行比较时验证talking是否设置为true。

您的代码将始终返回false,因为您将从0循环到23,这意味着当您达到8时,您将返回false。

答案 2 :(得分:1)

您的代码存在差异......

  1. 无需迭代(使用for循环)
  2. 您正尝试更改值talkinghour输入参数。你应该只是阅读这些。
  3. 您永远不会读取 talkinghour输入参数。
  4. 你真的只需要做两个的事情......

    1. 检查鹦鹉是否在说话。如果他不说话,那么你永远不会遇到麻烦。 if(talking)
    2. 如果他正在讲话,那么检查当前小时是否在导致麻烦的时间范围内。 if(hour < 7 || hour >20)

答案 3 :(得分:1)

您的代码存在许多问题。首要的是你的代码没有做它应该做的事情。如果您遇到麻烦,您的代码应该返回。你的代码所做的就是返回鹦鹉是否在说话。

此外,您的代码似乎总是会返回false。为什么?因为你正在迭代一天中的所有时间。当你的for循环到达hour == 7时,它既不是< 7也不是> 20。因此,if语句将return false

您应该创建一个布尔表达式,只检查给定值hour是否小于7或大于20:

return (hour < 7 || hour > 20)

另外你应该检查鹦鹉是否真的在说话。此信息由第一个方法参数talking表示。

所以:

return (is the parrot talking and is the hour smaller than 7 or greater than 20)

转换为:

return (talking && (hour < 7 || hour > 20));