CodingBat中的奇怪Java行为(Java Logic-2 MakeChocolate)

时间:2014-09-04 22:09:44

标签: java

当我对MakeChocolate使用以下代码时,它会在大约50%的时间内通过所有测试,并且在最后4组中失败,大约50%的时间出现超时错误。任何人都可以解释为什么它似乎在某些时候工作但不是其他时间? (我在试验之间没有任何改变,我只需按下" Go"按钮,它有时可以工作,有时也不会。)

也许是连接错误或其他什么?如果有的话,你们其中一个人可以在浏览器上试一试,看看它是否具有可重复性?

public int makeChocolate(int small, int big, int goal) {
  if ((goal - big*5) <= small && (goal %5) <= small) {
    int counter = 0;
    List<Integer> myList = new ArrayList();

    while(counter - big <= 0) {
       if ((goal - counter*5) >= 0) {
       myList.add(goal - counter*5);
       }
       counter += 1;
     }
    return myList.get(myList.size() - 1);
   }

  else {
    return -1;
  }
}

1 个答案:

答案 0 :(得分:1)

不,Java,CodingBat或网络速度都没有问题。这只是意味着您编写的代码完成了所有测试并及时完成了#39;什么时候这样做,而且“只是失败了”#39;如果没有这样做的话。为了确认我使用各种代码测试并发现最后四个测试失败了一些代码,因为代码根本不那么高效。例如我使用的第一个代码(一个非常简单的代码段): -

public int makeChocolate(int small, int big, int goal) {
  int ans= -1;


  for(int i = 1; i <= small; i++){
  if(i + (big * 5) == goal){
  ans = i;
  }

  }return ans;
}

显然这段代码没有通过所有测试,但由于其复杂性低,它能够通过最后四次测试。我使用的其他代码是: -

 public int makeChocolate(int small, int big, int goal) {
  int ans= -1;

 for(int j = 1; j <= big; j++){
 if(j * 5 < goal){
  for(int i = 1; i <= small; i++){
  if(i + (j * 5) == goal){
  ans = i;
  }}}
  else if(j * 5 == goal){
  ans = 0;}
  else{ for(int i = 1; i <= small; i++){
  if(i== goal){
  ans = i;}}}}return ans;
}

此代码能够通过上述所有测试但无法传递编码所需的时间限制,最后四次测试。根据我不能及时通过的测试是价值超过千的那个。如果您在50%的时间内及时获得代码,则必须将代码更改为更高效。祝你好运。