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