我需要编写自己的函数来返回数组中重复次数最多的值。 我有一个数组,我需要统计统计时尚(模式,这是数组中最重复的值),我不知道为什么它不起作用。
我创建了2个数组:
第一个包含值,第二个数组我要插入第一个数组中每个值重复的次数,然后通过我的函数findmax
,我搜索重复值的最大索引,并且然后最后用模式显示一条消息。
public int findmax(Integer [] somearray) {
int max = somearray[0];
int z=0;
for (int i = 0; i < somearray.length; i++) {
if (somearray[i]>max){
max = somearray[i];
z = i;
}
}
return z;
}
private void myModaActionPerformed(java.awt.event.ActionEvent evt) {
Double [] myarray = new Double[dsTable.getRowCount()];
Integer [] myarray2 = new Integer[dsTable.getRowCount()];
for (int i=0; i < myarray.length; i++){
myarray[i] = (Double)dsTable.getModel().getValueAt(i, 0);
}
java.util.Arrays.sort(myarray);
for (int i = 0; i < myarray.length; i++){
JOptionPane.showMessageDialog(this.mainPanel,((Double)myarray[i]));
}
for (int i = 0; i < myarray2.length; i++){
myarray2[i]=0;
}
for (int i = 0; i < myarray.length; i++){
for (int j = 0; j < myarray.length; j++){
if (myarray[i] == myarray[j]){
myarray2[i]++;
}
}
}
JOptionPane.showMessageDialog(this.mainPanel,myarray[findmax(myarray2)]);
}
程序的结果是第一个数组的第一个值。
答案 0 :(得分:1)
看起来像是你的作业,所以我会给你一些帮助你的指示。
考虑使用HashMap。这里的关键字是第一个数组中的数字,对于您遇到的每个值,值都是 count 。 因此,当您第一次遇到某个数字时,请将其添加到地图中,并且在以后的每个时间,您只需增加数值
一旦你拥有了这张地图,找出具有最大价值的钥匙将是微不足道的。另请注意,可能有多个密钥可以具有该最大值,因此您可能也希望处理该情况。
还有一个提示:你增加第二个数组的方式似乎不正确。您可能也希望在那里重新审视您的逻辑。
答案 1 :(得分:0)
是作业吗?因为你正在重新发明轮子。为什么不试试Commons Math?他们有许多统计类可以为你做大部分事情,而且非常简单:
DescriptiveStatistics statistics = new DescriptiveStatistics(someArray.lentgh);
for( Integer value : someArray){
statistics.addValue( value.doubleValue() );
}
// magick here
statistics.getMax();