Java CodingBat Logic teaParty?

时间:2012-03-19 20:11:57

标签: java

我显然错过了一个“如果”的陈述,但我不知道如果茶或糖果不是彼此的两倍,如何掩盖:

Java > Logic-1 > teaParty

我们正在举办一场盛大的茶和糖果派对。返回编码为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       

7 个答案:

答案 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;
}