我显然错过了一个“如果”的陈述,但我不知道如果茶或糖果不是彼此的两倍,如何掩盖:
我们正在举办一场盛大的茶和糖果派对。返回编码为0 =坏,1 =好,或2 =伟大的一方的int结果。如果茶和糖都至少是5,那么派对就是好的(1)。但是,如果茶或糖的价值至少是另一种的两倍,那么派对就很棒(2)。但是,在所有情况下,如果茶或糖都少于5,那么派对总是不好(0)。
teaParty(6, 8) → 1
teaParty(3, 8) → 0
teaParty(20, 6) → 2
这是我到目前为止的代码:
public int teaParty(int tea, int candy) {
if(tea < 5 || candy < 5)
return 0;
if(tea == 5 && candy == 5)
return 1;
if(tea != 5 && candy != 5)
return 1;
if(candy * 2 >= tea)
return 2;
if(tea * 2 >= candy)
return 2;
return 0;
}
这些是我收到的错误:
Expected This Run
teaParty(6, 8) → 1 1 OK
teaParty(3, 8) → 0 0 OK
teaParty(20, 6) → 2 1 X
teaParty(12, 6) → 2 1 X
teaParty(11, 6) → 1 1 OK
teaParty(11, 4) → 0 0 OK
teaParty(4, 5) → 0 0 OK
teaParty(5, 5) → 1 1 OK
teaParty(6, 6) → 1 1 OK
teaParty(5, 10) → 2 2 OK
teaParty(5, 9) → 1 2 X
teaParty(10, 4) → 0 0 OK
teaParty(10, 20) → 2 1 X
other tests
X
答案 0 :(得分:1)
你有一些冗余和不正确的情况。这是一个更简单的版本:
public int teaParty(int tea, int candy) {
if(tea < 5 || candy < 5) // your first case was correct
return 0;
if(candy * 2 <= tea || tea * 2 <= candy) // must be <= not >=
return 2;
return 1; // after you handle the first two cases, just return 1
}
答案 1 :(得分:1)
下面是代码,如果您想要一个简单的紧凑的单行解决方案而不使用Ifs,并且在您的代码中,某些条件检查是多余的,这可能导致错误
public int teaParty(int tea, int candy)
{
return (tea < 5 || candy < 5) ? 0: (tea >= 2 * candy || candy >= 2 * tea) ? 2 : 1;
}
答案 2 :(得分:0)
teaParty(20, 6) → 2 1 X
teaParty(12, 6) → 2 1 X
这两个都是1,因为它们都不等于5.它们由
触发if(tea != 5 && candy != 5)
return 1;
至于
teaParty(5, 9) → 1 2 X
这是因为它通过了返回1的“五个检查”,而糖果* 2(即10)大于茶(即9),所以它命中
if(candy * 2 >= tea)
return 2;
但是,你真的没有问这里的问题。你的目标是什么?你能提供更多背景吗?也许我们可以用它来找到真正的错误,而不只是症状。
答案 3 :(得分:0)
我可以解释为什么你得到你的输出,但我不知道你想要的是什么。
if(tea != 5 && candy != 5)
return 1;
这个if语句意味着如果茶和糖都不是5,那么返回1.这是你所拥有的第3个if语句,你需要通过这2个
if(tea < 5 || candy < 5)
return 0;
if(tea == 5 && candy == 5)
return 1;
因此,如果茶和糖都大于或等于5,那么第一个就会失败,如果茶或糖不是5,那么第二个就会失败。
在这些情况下
teaParty(20, 6) → 2 1 X
teaParty(12, 6) → 2 1 X
teaParty(10, 20) → 2 1 X
茶= 20,12,10都大于5而不是5
糖果= 6,20全部大于5而不是5
所以你得到第3个
这种情况
teaParty(5, 9) → 1 2 X
茶= 5
candy = 9
所以你得到第4个
if(candy * 2 >= tea) (9*2 >= 5) true
return 2;
答案 4 :(得分:0)
if(tea != 5 && candy != 5)
以检查一个是否是另一个的双重(至少)。删除if
语句或移动它,以便您可以进行双重检查。类似的东西:
if(tea < 5 || candy < 5)
return 0;
if(tea == 5 && candy == 5)
return 1;
if(tea != 5 && candy != 5)
{
if((candy * 2 >= tea) || (tea * 2 >= candy))
return 2;
return 1;
}
答案 5 :(得分:0)
public int teaParty(int tea, int candy) {
if (tea>=5 && candy>=5) {
if (tea>=candy*2 || candy>=tea*2) { return 2; }
else { return 1; }
}
return 0;
}
希望这会有所帮助。更清晰的逻辑。
答案 6 :(得分:0)
public int teaParty(int tea, int candy) {
if (tea >= 5 && candy >=5) {
if (tea / candy >= 2 || candy / tea >= 2) {
return 2;
}
return 1;
}
return 0;
}