【问题标题】:CodingBat AP-1, task no. 4?CodingBat AP-1,任务编号。 4?
【发布时间】:2014-06-09 20:38:36
【问题描述】:

我对 CodingBat 的“scoresAverage”任务有一些问题,属于 AP-1 类别。任务内容如下:

给定一个分数数组,计算前半部分和后半部分的 int 平均值,并返回较大的那个。我们会说后半部分从索引长度/2 开始。数组长度至少为 2。要练习分解,请编写一个单独的辅助方法
int average(int[] scores, int start, int end) { 计算索引 start..end 之间元素的平均值。调用您的辅助方法两次以实现 scoreAverage()。在 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

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

提前谢谢你。 :)

【问题讨论】:

    标签: java arrays average


    【解决方案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 ) );
    }
    

    你可以告诉你的 -> 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;
    }
    

    【讨论】:

    • 它有效,谢谢! :) 我认为问题出在第二次调用,其中参数 end 实际上是数组的总长度,包括不应该包含的数组的第一部分......怎么可能我错过了这个???
    • 是的,没错。错误发生在每个人身上;别担心。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多