嗨我试着计算一个二维数组的频率。我试图以某种方式显示频率,例如,如果表格如下:
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次,以及第一列中出现的次数是多少次,然后依此类推。
到目前为止我的代码是 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;
}
}
感谢您的帮助
答案 0 :(得分:0)
对于每列,请创建HashMap<int, int>
。密钥将是条目,该值将是该列中的频率,例如,该专栏:
1)迭代该列的元素
2)对于列的每个元素,如果它已经作为键存在于hashmap中,则获取其值,将其递增1并在同一个键下添加新值。如果尚未添加,请添加值1
让ArrayList<HashMap<int, int>>
包含每列的其中一个。
您还可以保留HashMap<int, int>
来计算元素在全球范围内出现的次数。这样,如果要保留每个元素对每个列都有计数的属性,即使该列的计数为0,也可以使用此全局HashMap
来完成并在每列中添加键。 H ashMap
尚不存在。
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
答案 1 :(得分: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]]++;
}
}