首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AP计算机科学A ArrayList

AP计算机科学A ArrayList
EN

Stack Overflow用户
提问于 2020-04-22 14:50:10
回答 1查看 75关注 0票数 0

下面是问题:

给定未知大小的整数的ArrayList和其他三个int值,删除位于int值指定的索引位置的ArrayList的三个元素。将ArrayList的第一个元素设置为删除的三个值的平均值(四舍五入为最接近的整数),并返回ArrayList。

前提条件: ArrayList将至少包含四个元素,其他int值将按降序排列,以防止混淆它们所代表的索引。

代码语言:javascript
复制
apcsaListAverageRemovals([3, 6, 8, 10], 3, 2, 1) → [8]
apcsaListAverageRemovals([-177, 383, 476, -15, 62, 19, -247], 3, 2, 1) → [281, 62, 19, -247]
apcsaListAverageRemovals([258, 99, 225, 430, -497, 124], 4, 3, 3) → [19, 99, 225]

这是我尝试过的解决方案

代码语言:javascript
复制
public ArrayList<Integer> apcsaListAverageRemovals(ArrayList<Integer> lst, int a, int b, int c) {
  int suma = lst.get(a);
  lst.remove(a);
  int sumb = lst.get(b);
  lst.remove(b);
  int sumc = lst.get(c);
  lst.remove(c);
  int avg = (suma + sumb +sumc)/3;
  lst.set(0, avg);
  return lst; 
}

在大多数情况下,我的解决方案都是有效的,但在少数情况下,它返回的第一个元素比该情况下的期望值小1。

这里有一个例子:apcsaListAverageRemovals([33, -481, 245, 359, 166], 3, 2, 2) → Expected:[257, -481] Returned:[256, -481]

EN

回答 1

Stack Overflow用户

发布于 2020-05-01 05:35:20

计算3个值的平均值的行不会舍入,它会截断(总是向下舍入)。要解决此问题,请将该行更改为:

代码语言:javascript
复制
int avg = (suma + sumb +sumc)/3 + 0.5;

将平均值计算为双精度,然后添加额外的0.5,因此当双精度转换为整型时发生的截断也是适当的舍入。如果您不明白原因,我将提供几个示例,使用|来表示截断(这意味着1.5将被写为1|.5,因为它被截断为1)。

代码语言:javascript
复制
2.3 should round to 2 -> 2.3 + 0.5 = 2|.8 
2.7 should round to 3 -> 2.7 + 0.5 = 3|.2
3.5 should round to 4 -> 3.5 + 0.5 = 3|.0
3.4999 should round to 3 -> 3.499 + 0.5 = 3|.999

在您的问题中包含的示例中:

代码语言:javascript
复制
The average of 359, 245, and 166 should round to 257.
(359 + 245 + 166)/3.0 = 256.66666667
256.66666667 + 0.5 = 257|.16666667

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61358906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档