-1

配列の最も繰り返される値を返す独自の関数を作成する必要があります。配列があり、統計的な方法 (配列で最も繰り返される値であるモード) をカウントする必要がありますが、なぜ機能しないのかわかりません。

2 つの配列を作成します。

最初の配列には値が含まれており、最初の配列の各値が繰り返される回数を挿入する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の使用を検討してください。ここで、キーは最初の配列の数値になり、値は遭遇する各値のカウントになります。したがって、最初に数値に遭遇したときにそれをマップに追加し、その後は毎回値を増やします

  • このマップを取得したら、最大値を持つキーを見つけるのは簡単です。また、その最大値を持つことができるキーが複数ある可能性があるため、その場合も処理する必要がある場合があることに注意してください。

もう 1 つのヒント: 2 番目の配列をインクリメントする方法が間違っているようです。あちらのロジックも再検討することをお勧めします。

于 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 に答える