2

統計を支援するプログラムを作成したいのですが、最初から問題があり、乱数と1次元のみの配列の相対頻度を計算するのに非常に混乱しています。

たとえば、これらの数値を生成するには:

{3, 5, 5, 2, 4, 1, 3, 5, 4}

が 2 回、 3 回、5 回3繰り返されることをプログラムに教えてもらいたい45

中央値、第 1 および第 3 四分位数を計算するためにこれらの値を並べ替えるクラスを作成しましたが、他の値を計算するために頻度を見つける方法はまだわかりません。

御時間ありがとうございます

PS: これが何かに影響するかどうかはわかりませんが、私はnetbeansを使用しています

4

4 に答える 4

3

あなたは確かにこれを探しています:コレクション: 頻度

コレクションがない場合は、最初に配列をリストに変換します。

Collections.frequency(Arrays.asList(yourArray), new Integer(3))
于 2013-01-10T20:51:30.077 に答える
2

数値の範囲が比較的小さい場合は、カウンターの配列を使用することをお勧めします。たとえば、乱数が間隔内にある場合[1,5]、サイズ 5 の配列を使用して頻度カウンターを保存および更新できます。

int[] numbers = {3, 5, 5, 2, 4, 1, 3, 5, 4} ;
int[] frequencies = new int[5];

for(int n : numbers)
    frequencies[n-1]++;

出力配列( frequencies):

1 1 2 2 3

編集:

この方法は、すべての範囲に適用できます。たとえば、次の範囲の数値があるとします[500,505]

int[] frequencies = new int[6];

for(int n : numbers)
    frequencies[n-500]++;
于 2013-01-10T20:55:49.077 に答える
0
    int[] numbers = {100, 101, 102, 103, 5 , 4, 4 , 6} ;

    Map<Integer, Integer> m = new HashMap<Integer, Integer>();
    for(int num: numbers){
        if(m.containsKey(num)){
            m.put(num, m.get(num)+1);
        }else{
            m.put(num, 1);
        }   
    }
    for (Map.Entry<Integer, Integer> entry : m.entrySet()) {
        System.out.println("Key: " + entry.getKey() + " | Frequencey: " + entry.getValue());
    }
于 2013-01-11T02:14:44.773 に答える
0

編集:以下のように頻度を保存するためにマップを使用できます:

import java.util.HashMap;
import java.util.Map;

public class Frequency {
    public static void main(String[] args) {
        int[] nums = { 3, 5, 5, 2, 4, 1, 3, 5, 4 };
        int count = 1;
        // number,frequency type map.
        Map<Integer, Integer> frequencyMap = new HashMap<Integer, Integer>();
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != -1) {
                for (int j = i + 1; j < nums.length; j++) {
                    if (nums[j] != -1) {
                        if (nums[i] == nums[j]) {
                            // -1 is an indicator that this number is already counted.
                            // You should replace it such a number which is sure to be not coming in array.
                            nums[j] = -1;
                            count++;
                        }
                    }
                }
                frequencyMap.put(nums[i], count);
                count = 1;
            }
        }
        for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) {
            System.out.println(" Number :" + entry.getKey()
                    + " has frequence :" + entry.getValue());
        }
    }
}

出力あり:

 Number :1 has frequence :1
 Number :2 has frequence :1
 Number :3 has frequence :2
 Number :4 has frequence :2
 Number :5 has frequence :3
于 2013-01-10T20:55:36.130 に答える