我在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代码的问题是什么第一名。不过,更好/更简单的替代品非常受欢迎。
答案 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;
}