关于和问题,我有一个Java逻辑问题要解决



我试图获得一个列表并对其求和,但逻辑有点奇怪。

例如

General cost = 
{234.456,
345.456,
456.567,
567.678}

我尝试

求和

一般成本将每行小数点后的数字相加,如果不超过1,则将小数点后值传递给下一行。

在上述情况下,我将一般成本逐一称为

1->234(通过0.456进入下一个(

2->345(345.456+0.456=345.912 0.912传递到下一个,由于小数点后的数字不超过1,小数点后数字按原样传递(

3->457(456.567+0.912=457.479 0.479传递到下一个,因为小数的和大于1,所以将值加1,并将其余小数传递到下个(

4->568(567.678+0.479=568.157将0.157传递给下一个,由于小数之和大于1,因此将值加1,并将其余小数传递给下个(

总和->1604(求和,四舍五入到小数点后一位(

我正努力把它做成这样。

你能做到吗?如果你能做到这一点,你应该用什么样的逻辑来实现?

您可以通过初始化一个双重类型的局部变量sum来实现这一点

double sum = 0; // Widening Casting

使用一个循环在数组上迭代并使用正确的语句,例如if。。。否则如果。。。否则处理加法操作,包括最后一次取整操作,我假设

sum += arrayItem; // Compound assignment operator

那么你应该表现得很好。

试试这个。

public static void main(String[] args) {
double[] costs = {234.456, 345.456, 456.567, 567.678};
double carry = 0;
double total = 0;
for (double cost : costs) {
double sum = cost + carry;
carry = sum % 1;               // get fractional part of sum
double newCost = sum - carry;  // get integer part of sum
total += newCost;
System.out.printf("cost=%.3f new cost=%.0f carry=%.3f%n", cost, newCost, carry);
}
System.out.printf("total=%.0f%n", total);
}

输出:

cost=234.456 new cost=234 carry=0.456
cost=345.456 new cost=345 carry=0.912
cost=456.567 new cost=457 carry=0.479
cost=567.678 new cost=568 carry=0.157
total=1604

最新更新