初学者。我试图找到任何可以解决这个问题的问题,但我不能,所以如果最终成为副本,我会提前道歉。
所以我有一个名为pay的Double [],它包含三个Double值(totalPay,basePay,hoursWorked),我将其存储在名为payList的ArrayList中。
我正在寻找一种能够确定平均总支付,平均基本支付和平均工作时间的方法, 我尝试使用foreach,但似乎没有工作。
Double avgTotalPay=0.0;
Double avgBasePay=0.0;
Double avgHoursWworked=0.0;
for(Double paym[] : payList){
for(Double p: paym){
avgTotalPay+=paym[0];
}
avgTotalPay=avgTotalPay/payList.size();
}
for(Double paym[] : payList){
for(Double p: paym){
avgBasePay+=paym[1];
}
avgBasePay=avgBasePay/payList.size();
}
for(Double paym[] : payList){
for(Double p: paym){
avgHoursWworked+=paym[2];
}
avgHoursWworked=avgHoursWworked/payList.size();
}
System.out.println("Average Total Pay is: "+avgTotalPay+"\n Average Base Pay is: "+avgBasePay
+"\n Average number of hours worked is: "+avgHoursWworked);
(当用户输入0表示基本工资和工作小时数时,该功能应平均总工资,基本工资和工作小时数。)
请输入基本工资:
10个
请输入工作小时数:
10个
总薪水为100.0美元,每小时工资为10.0美元/小时
请输入基本工资:
500个
请输入工作小时数:
50个
总工资为1000.0美元,每小时工资为20.0美元/小时(最高工资总额不超过1000美元)
请输入基本工资:
0
请输入工作小时数:
0
平均总薪酬为:2250.0
平均基本工资是:1125.0
平均工作小时数为:112.5
如果我手工计算平均值,它们应该是
总薪水550美元,
基本工资250美元,和
工作小时数为30
答案 0 :(得分:1)
您不需要所有这些循环,也不需要使用Double
包装器。一个循环应该足够,没有内循环。像,
double avgTotalPay = 0.0;
double avgBasePay = 0.0;
double avgHoursWworked = 0.0;
for (Double[] paym : payList) {
avgTotalPay += paym[0];
avgBasePay += paym[1];
avgHoursWworked += paym[2];
}
avgTotalPay /= payList.size();
avgBasePay /= payList.size();
avgHoursWworked /= payList.size();
或,如果您使用的是Java 8+,则可以使用Stream
之类的
double avgTotalPay = payList.stream().mapToDouble(x -> x[0]).average()
.orElse(0);
double avgBasePay = payList.stream().mapToDouble(x -> x[1]).average()
.orElse(0);
double avgHoursWworked = payList.stream().mapToDouble(x -> x[2]).average()
.orElse(0);
答案 1 :(得分:0)
可以在迭代中解决
double avgTotalPay = 0.0;
double avgBasePay = 0.0:
double avgHrsWorked = 0.0;
for (Double pay[] : payList) {
avgTotalPay += pay[0];
avgBasePay += pay[1];
avgHrsWorked += pay[2];
}
avgTotalPay /= payList.size();
avgBasePay /= payList.size();
avgHrsWorked /= payList.size();