访问ArrayList中每个数组中的第一个元素并对它们进行平均

时间:2017-09-30 03:23:23

标签: java arrays arraylist

初学者。我试图找到任何可以解决这个问题的问题,但我不能,所以如果最终成为副本,我会提前道歉。

所以我有一个名为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

2 个答案:

答案 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();