【问题标题】:accessing the the first element in each array in an ArrayList and averaging all of them访问 ArrayList 中每个数组中的第一个元素并平均所有这些元素
【发布时间】:2017-09-30 03:23:22
【问题描述】:

这里是初学者。我试图找到任何可以解决这个问题的问题,但我找不到,所以如果这最终是重复的,我提前道歉。

所以我有一个名为 pay 的 Double[],其中包含三个 Double 值(totalPay、basePay、hoursWorked),我将它们存储在一个名为 payList 的 ArrayList 中。

我正在寻找一种能够确定平均 totalPay、平均 basePay 和平均工作时间的方法, 我尝试使用 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

【问题讨论】:

  • 你得到了什么输出,你的预期输出是什么?
  • 你能分享一下paypaympayList的定义吗?
  • @RajeevRanjan ArrayList payList = new ArrayList(); Double[] pay= new Double[3];
  • @user2023608 我在问题中添加了代码的示例执行。 :)

标签: java arrays arraylist


【解决方案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(s) 之类的方法

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);

【讨论】:

    【解决方案2】:

    可以在迭代中解决

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

    【讨论】:

      猜你喜欢
      • 2014-01-09
      • 2021-05-22
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多