CodingBat AP-1,任务号。 4?

时间:2014-06-09 20:38:36

标签: java arrays average

我在CodingBat" scoreAverage"中遇到了一些问题。任务,在类别AP-1中。任务说明如下:

  

给定一系列分数,计算上半部分和后半部分的整数平均值,并返回较大者。我们说下半场从索引长度/ 2开始。数组长度至少为2.要练习分解,请编写一个单独的辅助方法
int average(int []得分,int start,int end){它计算索引start..end之间元素的平均值。调用助手方法两次以实现scoresAverage()。在JavaBat文本区域中的scoresAverage()方法之后编写辅助方法。通常你会用双精度计算平均值,但在这里我们使用整数,因此预期结果是准确的。

好的,按照规则,我写了一个分解的代码,但由于一些神秘的原因,它没有100%正常工作。这是我的代码:

public int scoresAverage(int[] scores) {
    int startFirst=0;
    int endFirst=scores.length/2;

    int startSecond=scores.length/2;
    int endSecond=scores.length;

    int a=average(scores,startFirst,endFirst);
    int b=average(scores,startSecond,endSecond);

    int avg = Math.max(a,b);
    return avg;
}

public int average(int[] scores, int start, int end) {
    int count=0;
    for (int i=start;i<end;i++){
        count+=scores[i];
    }
    return count/end;
}

一些测试的输出正常,但其他测试没有,我看不出原因!您可以自己在CodingBat上测试我的代码:http://codingbat.com/prob/p123837

请不要给我写完全不同的代码,除非我的代码真无用!我知道必须有数以百万计的方法来解决这个问题,我也认为我的不是最好的方法之一(我是一个非常的菜鸟),但我仍然想知道MY代码的问题是什么第一名。不过,更好/更简单的替代品非常受欢迎。

1 个答案:

答案 0 :(得分:1)

我认为你的问题是你实际从长度计算平均值。我是怎么做到的;不要感到有压力要使用它......

int average( int[] scores, int start, int end ) {
  int sum = 0;
  for ( int i = start; i < end; ++i ) {
    sum += scores[i];
  }
  return ( sum / ( end - start ) );
}

你可以告诉你 - &gt; return count/end; 和我的不同。

如果您有兴趣,可以让您的代码更加简洁......

public int scoresAverage(int[] scores) {
  int a1 = average( scores, 0, scores.length / 2 );
  int a2 = average( scores, scores.length / 2, scores.length );
  return ( a1 > a2 ) ? a1 : a2;
}