1

嗨,我正在尝试计算二维数组的频率。我正在尝试以某种方式显示频率,例如,如果表格如下:

0:1 2 0

1:2 0 1

2:1 0 2

我希望能够像这样计算频率:

0:0 2 1

1:2 0 1

2:1 1 1

所以表格应该是多少次 0 出现在第一列中,多少次 1 出现在第一列中,然后依此类推。

到目前为止我的代码是

    for (int t = 0; t<s;t++)
    {
        int count= 0 ; 
        for (int p = 0; p<s; p++)
        {
            if(table[p][t] ==p )
            {
                count++

            }
            else if(t+1 != s)
                continue;
            else 
                table[p][t] = count; 
                count = 0;
        }
    }

谢谢您的帮助

4

2 回答 2

0

对于每一列,制作一个HashMap<int, int>. 键将是条目,值将是该列中的频率,例如该列:

1) 遍历该列的元素

2) 对于列的每个元素,如果它已经作为键存在于 hashmap 中,则获取其值,将其加一并在同一键下添加新值。如果尚未添加,则添加值为 1

为每列制作一个ArrayList<HashMap<int, int>>以包含其中一个。

您还可以保留 aHashMap<int, int>来计算元素在全球范围内出现的次数。这样,如果您想保留每个元素对每列都有计数的属性,即使该列的计数为 0,您也可以使用这个全局HashMap来遍历并在每列的 HashMap中添加不还存在。

HashMap是一种数据结构,允许您将值与每个键相关联,并且您可以添加任意数量的条目,这与数组不同,并且条目不必具有连续整数的键。ArrayList就像一个数组,但您可以添加和删除它以更改其中包含的元素数量。

http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html

http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html

于 2013-04-09T04:51:15.953 回答
0

如果您发布的示例是数组的样子(即唯一可能的值是 0、1 和 2),那么您可以执行以下操作 -

int[][] counts = new int[3][3]; //this inits all the elements to 0
//iterate through all the elements in your source array
for(int row=0; row<source.length; row++) {
    for(int col=0; col<source[row].length; col++) {     
        //just increment the appropriate element of the counts array here       
        counts[col][source[row][col]]++; 
    }
}
于 2013-04-09T05:14:49.630 回答