Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找二维阵列的模式_Java_Arrays - Fatal编程技术网

Java 查找二维阵列的模式

Java 查找二维阵列的模式,java,arrays,Java,Arrays,我尝试使用频率数组返回2D数组的模式。我有一个数组score,长度为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].le

我尝试使用频率数组返回2D数组的模式。我有一个数组score,长度为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);
int值=0;
int[]freq=新的int[100];
for(int row=0;row最大值)
{
最大=频率[i];
模式=i;
}
}
System.out.println(“模式分数为:“+模式”);

问题是,这只是将模态分数返回为0,而实际情况并非如此。

您在生成
freq
数组时遇到问题。如果我理解正确,在第一个double for块中,您试图将数字的频率放入
freq
数组中

但你所做的只是:

   int value = 0;
   .....
   score[row][col] = value;
   freq[value]++;`
首先,您要更改
分数数组(我想这对您来说是个问题…),然后进入
freq[0]
并执行
++
。显然,modal是0,该数字出现在所有数组中

解决方案:在第一个double for block中,您应该执行以下操作:

        value = score[row][col];
        freq[value]++;
因此,我认为您混淆了行的顺序,应该是相反的;
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);
int[]freq=新int[arr.length]; 对于(int i=0;i最大值) { 最大=频率[i]; 模式=i; } } System.out.println(“模式分数为:“+模式”);
专用静态无效打印模式(双[]双[]双){
HashMap=newHashMap();
对于(int i=0;ival.getValue().equals(objects[objects.length-1]);
stream.forEach(System.out::println);
}
我认为使用流查找模式是最好的方法。
使用int而不是double不会导致任何问题。

您总是将
分数[row][col]
分配给
,但是
值实际上是零,因为初始化后它不会更改。为什么有这行代码<代码>分数[行][列]=值
score[row][col]=value
不应该反过来吗?
private static void printMode(double[][] doubles) {
    HashMap<Double , Double> map = new HashMap();

    for (int i = 0; i < doubles.length; i++) {
        for (int j = 0; j < doubles[i].length; j++) {
            double temp = doubles[i][j];
            if(map.get(temp)==null){
                map.put(doubles[i][j],1.0);
            }else {
                double temp2 = (double) map.get(temp);
                map.put(doubles[i][j],++temp2);
            }
        }
    }
    Object[] objects = map.values().stream().sorted().toArray();
    Stream stream = map.entrySet().stream().filter(val-> val.getValue().equals(objects[objects.length-1]));
    stream.forEach(System.out::println);
}