-1

我需要编写自己的函数来返回数组中重复次数最多的值。我有一个数组,我需要统计统计时尚(模式,这是数组中重复次数最多的值),我不知道为什么它不起作用。

我创建了 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)]);              
}

程序的结果是第一个数组的第一个值。

4

2 回答 2

1

看起来像你的作业,所以我会给你一些建议来帮助你。

  • 考虑使用HashMap。这里的键是你的第一个数组中的数字,值是你遇到的每个值的计数所以当你第一次遇到一个数字时,将它添加到地图中,之后的每一次,你只需增加值

  • 一旦你有了这张地图,找出具有最大值的键将是微不足道的。另请注意,可能有不止一个键可以具有该最大值,因此您可能也希望处理这种情况。

另一个提示:您增加第二个数组的方式似乎不正确。您可能还想在那里重新审视您的逻辑。

于 2012-09-30T16:36:19.897 回答
0

是作业吗?因为你正在糟糕地重新发明轮子。你为什么不试试Commons Math呢?他们有许多统计类可以为你做大部分事情,而且非常简单:

DescriptiveStatistics statistics = new DescriptiveStatistics(someArray.lentgh);

for( Integer value : someArray){
  statistics.addValue( value.doubleValue() );
}

// magick here
statistics.getMax();
于 2012-09-30T16:27:39.490 回答