如何对数组列表的元素求和?
Posted
技术标签:
【中文标题】如何对数组列表的元素求和?【英文标题】:How do I sum the elements of an array list? 【发布时间】:2021-09-01 20:04:49 【问题描述】:我正在尝试使用 while 循环来显示一些计算的结果。
循环中的每次迭代都将两个数字相除,一个数字递增两次,将结果存储在数组列表中,并且应该对数组列表中的所有元素求和。
但是,我的求和结果不正确,我似乎无法弄清楚原因。我应该得到 1956.9272 但它显示 73.3576,知道我做错了什么吗?
这是我的代码:
import java.util.ArrayList;
public class testtest
public static void main(String[] args)
// Initialize variables
double num1 = 1;
double num2 = 3;
double sum = 0;
// A new array list is created
ArrayList<Double> myCalc = new ArrayList<Double>();
// While loop is started if num2 is lass than 99
while (num2 <= 99)
//Divides 1 by num2
double answer = num1 / num2;
// Adds the result to the array list
myCalc.add(answer);
// Twice increments num2, which is the denominator
++num2;
++num2;
// For loop iterates through each element in the array list
for (Double result : myCalc)
// Sums all the elements in the array list
sum += result;
// Displays the results of adding the array list elements together
System.out.printf("%.4f", sum);
【问题讨论】:
//Divides num2 by 1 double answer = num1 / num2;
- 你确定吗?
糟糕,我的评论没有错。我的意思是“将 1 除以 num2”。
你想在所有其他计算完成后对 myCalc 求和吗?如果是这样,则将该循环for (Double result ...
移到System.out.printf
之前。但是,这并不能完全给出您的预期结果。您的规范需要更清晰一些。
是的,我想将每个计算的所有单独结果存储在 myCalc 中,然后将它们加在一起。基本上是在做等式(1/3)+(1/5)+(1/7)+等。
为什么要使用列表?这可以通过一个循环来完成。是否真的需要对列表的元素求和,但将列表的每个元素乘以某个不断变化的因子?
【参考方案1】:
double n1 = 1, n2 = 3, result, sum = 0;
ArrayList<Double> list = new ArrayList<>();
while( n2 <= 99)
result = n1/n2;
list.add(result);
n2 += 2;
for(double temp: list)
sum = sum + temp;
System.out.println(sum); //1.9377748484749076
如果你在得到的时候把for循环放在里面
double n1 = 1, n2 = 3, result, sum = 0;
ArrayList<Double> list = new ArrayList<>();
while( n2 <= 99)
result = n1/n2;
list.add(result);
n2 += 2;
for(double temp: list)
sum = sum + temp;
System.out.println(sum); //73.35762984798366
【讨论】:
【参考方案2】:你正在做sum(k = 1 to 49) of 1/(1+2k) * (49+1-k)
。或者在java中:
double sum = 0;
for (int k = 1; k < 50; ++k)
sum += (50.0 - k)/(1 + 2*k);
这确实接近 73。
我只能猜测原来的规范也改变了num1
或者更有可能
answer
也必须添加到每个数组元素中。
【讨论】:
无论我做什么,我似乎都离我的任务要求越来越远。我只是想做 1/3 + 1/5 + 1/7 + 1/9 + 1/11 + 1/13 + 1/15 + 1/17 + 1/19 + 1/21 + 1/23 + 1/25 + 1/27 + 1/29 + 1/31 + 1/33 + 1/35 + 1/37 + 1/39 + 1/41 + 1/43 + 1/45 + 1/47 + 1 /49 + 1/51 + 1/53 + 1/55 + 1/57 + 1/59 + 1/61 + 1/63 + 1/65 + 1/67 + 1/69 + 1/71 + 1/73 + 1/75 + 1/77 + 1/79 + 1/81 + 1/83 + 1/85 + 1/87 + 1/89 + 1/91 + 1/93 + 1955 + 1/97 + 1/99 ,但我必须使用 while 循环,并且分母必须增加两次。有什么想法或者我应该放弃这个并重新开始吗? 这不是sum for i=1 to 49 of 1.0 / (1 + 2*i)
吗?甚至更小。假设真正的答案是 R,你的答案 = A,那么看起来 R = A²/2。在for i in 0 .. n for j in i .. n
中可以看到这样的方形 divby 2。有点你在用数组做什么。 所以,是的:从作业要求的内容重新开始。【参考方案3】:
出于调试目的,让我们执行以下操作:
在 // 初始化变量下添加double ans = 0.0;
在double answer = num1 / num2;
下添加ans = ans + answer;
后跟System.out.printf("%.4f %.4f %.4f = %.4f\n", num1, num2, answer, ans);
这将显示运行总计和总计的增量。我明白了
1.0000 3.0000 0.3333 = 0.3333
1.0000 5.0000 0.2000 = 0.5333
1.0000 7.0000 0.1429 = 0.6762
1.0000 9.0000 0.1111 = 0.7873
...
1.0000 99.0000 0.0101 = 1.9378
所以,也许作业的总数有误,或者有些东西你没有包括在内。
【讨论】:
以上是关于如何对数组列表的元素求和?的主要内容,如果未能解决你的问题,请参考以下文章