我正在使用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 +
}
答案 0 :(得分:4)
该函数有两个参数,talking
和hour
。代码所做的第一件事就是将hour
设置为0.这意味着在决定应该返回什么值时,代码完全忽略了它的一个参数。
答案 1 :(得分:2)
请注意,写作没有意义
if(boolean)
{
boolean = true;
}
else
{
return false;
}
return boolean;
当你可以简单地写return boolean
第一种情况也不会在第二种情况进行比较时验证talking
是否设置为true。
您的代码将始终返回false,因为您将从0循环到23,这意味着当您达到8时,您将返回false。
答案 2 :(得分:1)
您的代码存在差异......
for
循环)talking
和hour
输入参数。你应该只是阅读这些。talking
或hour
输入参数。你真的只需要做两个的事情......
if(talking)
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));