Java HashMap/ArrayList平均程序

Java HashMap/ArrayList平均程序,java,arraylist,hashmap,Java,Arraylist,Hashmap,有点编程新手,所以请容忍我 我在一个HashMap中创建了一个ArrayList,这样我所有的值都可以加起来成为一个和,这样我就可以用这个和除以ArrayList的条目数,这将得到我的平均值。。。除以下情况外,所有工作正常: 我在ArrayList中的第一个条目总是返回0.0,即使在GUI中输入45或其他值。如何更改它以使我的ArrayList停止在我的第一个条目上放置0?因为我已经创建了一个平均程序,如果我的第一个ArrayList条目正在检索正确的条目,该程序就可以工作,而不是每次都返回0

有点编程新手,所以请容忍我

我在一个HashMap中创建了一个ArrayList,这样我所有的值都可以加起来成为一个和,这样我就可以用这个和除以ArrayList的条目数,这将得到我的平均值。。。除以下情况外,所有工作正常:

我在ArrayList中的第一个条目总是返回0.0,即使在GUI中输入45或其他值。如何更改它以使我的ArrayList停止在我的第一个条目上放置0?因为我已经创建了一个平均程序,如果我的第一个ArrayList条目正在检索正确的条目,该程序就可以工作,而不是每次都返回0

这是我的密码:

public void addModRes( String mod, Integer res ) {

    ArrayList<Integer> nums = myMap.get(mod);
    if (nums == null) {
        nums = new ArrayList<Integer>();
    }

    double sum = 0;
    double test =0;
    double avg =0;

    for (Integer number : nums) {
        sum += number;
    }
    //except sum is missing out the first entry in the ArrayList       
    System.out.println("The Sum of all the numbers in the array is " + sum);

    nums.add(res);
    myMap.put(mod, nums);

    test = nums.size();

    //System.out.println("This is the size of the array list "+ 
    numbers.size());

    avg = sum/test;

    System.out.println("this is the average: "+ average);
} 
public void addModRes(字符串mod,整数res){
arraylistnums=myMap.get(mod);
如果(nums==null){
nums=新的ArrayList();
}
双和=0;
双重检验=0;
双平均值=0;
用于(整数:nums){
总和+=数字;
}
//除了sum缺少ArrayList中的第一个条目
System.out.println(“数组中所有数字的总和为”+Sum);
增补(res);
myMap.put(mod,nums);
测试=nums.size();
//System.out.println(“这是数组列表的大小”+
number.size());
平均值=总和/测试;
System.out.println(“这是平均值:“+平均值”);
} 

我试着理解你的代码,我猜你想要这样的东西:

您需要一个存储数字列表的
HashMap
(来自
HashMap
ArrayList
),该列表可以用它们的
id
(在
HashMap
中的
字符串
)来识别

  • 将新列表添加到HashMap
  • 假设我们的类中有一个实例变量
    listMap

    public int createList(String listId) {
        this.listMap.put(listId, new ArrayList<Integer>() );
        return this.listMap.size();
    }
    
  • 计算某个列表的平均值
  • 现在我们可以使用这些列表来计算它们的平均值

    public double averageForList(String listId){
        double sum = 0;
        double average = 0;
    
        for (Integer number : this.listMap.get(listId) )
        {
             sum += number;
        }
    
        if (this.listMap.get(listId).size() != 0) average = sum / this.listMap.get(listId).size();
    
        return average;
    }
    

    应该是这样。

    avg=test/sum-你倒过来了。它应该是
    avg=sum/test不应该是
    nums.add(res)而不是
    数字。添加(res)。此外,我认为您不需要
    myMap.put(mod,nums)因为您直接在nums上工作,并且它已经包含在myMap中。欢迎使用堆栈溢出!寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参见:如何创建。使用链接改进您的问题-不要通过评论添加更多信息。谢谢为了得到真实的、听起来不错的答案,您必须使我们能够重现您的代码所做的事情。我们不能这样做,因为您没有向我们展示该方法是如何调用的以及它在操作什么数据。我看到您在函数中包含了一个
    整数res
    ,我假设这是存储结果的整数?在C++中,这可能是一个很好的实践,但是对于整型,我认为最好让函数返回需要的值,而不是传递结果变量。这不是我要找的,但将来可能对程序有用。我只是想找出为什么我的ArrayList总是把它的第一个条目置为0,不管我输入什么,这意味着我所有的平均值都是错误的。对不起,我的原始问题没有说得更清楚,谢谢你抽出时间。
    public double averageForList(String listId){
        double sum = 0;
        double average = 0;
    
        for (Integer number : this.listMap.get(listId) )
        {
             sum += number;
        }
    
        if (this.listMap.get(listId).size() != 0) average = sum / this.listMap.get(listId).size();
    
        return average;
    }