查找2D阵列的模式

时间:2015-11-22 22:09:23

标签: java arrays

我正在尝试使用频率数组返回2D数组的模式。我有一个数组,得分,长度为10,有3列。每列包含一个介于0和100之间的int。

我正在尝试找到一种遍历数组并返回模态值的方法。到目前为止我所拥有的是:

    int value = 0;
    int[] freq = new int[100];

    for (int row = 0; row < score.length; row++) {
        for (int col = 0; col < score[row].length; col++) {
            score[row][col] = value;
            freq[value]++;
        }
    }
    int largest = 0;
    int mode = -1;

    for (int i = 0; i < 100; i++) {
        if (freq[i] > largest)
        {
            largest = freq[i];
            mode = i;
        }
    }
    System.out.println("modal score is: " +mode);

问题是,这只是将模态分数返回为0,而不是。

3 个答案:

答案 0 :(得分:0)

生成freq数组时遇到问题。如果我理解正确,在第一个双重阻止块上,你试图将数字的频率放在freq数组中。

但你所做的只是:

   int value = 0;
   .....
   score[row][col] = value;
   freq[value]++;`

首先,您要更改score数组,(我猜这对您来说是个问题...),然后您转到freq[0]并执行++。显然模态为0,该数字出现在所有数组中。

解决方案:在你应该做的第一个双重阻止中:

        value = score[row][col];
        freq[value]++;

所以我认为你混淆了这条线的顺序,它应该是相反的方式。

答案 1 :(得分:0)

 preceding::image[@id=$curr_id][1]/path
 following::image[@id=$curr_id][1]/path

我认为使用 Stream 查找模式是最好的方法。 使用 int 而不是 double 不会造成任何问题。

答案 2 :(得分:-1)

int value = 0;
int [] freq = new int [arr.length];
for (int i = 0; i < arr.length; i++){
   for (int j = 0; j < arr[i].length; j++){
     value = arr[i][j];
     freq[value]++;
   }
} 
int largest = 0;
int mode = 0;

for (int i = 0; i < freq.length; i++) {
    if (freq[i] > largest)
    {
        largest = freq[i];
        mode = i;
    }
}
System.out.println("modal score is: " +mode);