我正在尝试使用频率数组返回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,而不是。
答案 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);