【问题标题】:Get the median from a 2D Array in Java从Java中的二维数组中获取中位数
【发布时间】:2017-12-03 09:43:01
【问题描述】:

我是编程新手,2 个月前开始学习 Java。 我被分配做一个小程序,这个程序的一部分我必须从二维数组中获取中值。二维数组由 3 个科目和 (N) 个学生组成。我必须得到每个科目的中位数,但我无法真正理解如何对每个科目的数字进行排序。

非常感谢我应该开始的任何帮助、提示或建议。

【问题讨论】:

  • 考虑到布局,你真的不能。您需要转置 2D 数组,这样您就有 3 个数组,每个数组都包含一个主题的所有标记 - 然后您可以对数组进行排序并获得中位数。
  • 可以使用Arrays类的重载函数对数组进行排序。

标签: java arrays median


【解决方案1】:

考虑到 arr 是包含双精度值的二维数组。使用以下代码

Arrays.sort(arr, Comparator<double[]>() {
    public int compare(double a, double b) {
        return Double.compare(a[0], b[0]);
    }
});

Arrayscomarator 都在 java.util 包下可用。 如果您使用的是 java 8,这可以在一行中完成。

Arrays.sort(arr, (a,b) -> Double.compare(a[0], b[0]));

【讨论】:

  • 你的第一个代码 sn-p 至少有两个编译错误。但更糟糕的是,你没有解释你的代码在做什么,或者为什么你认为这是问题的答案。我投了反对票,不是因为错误,而是因为缺乏解释。
【解决方案2】:

你可以使用java.util.arrays.sort()方法。

import java.util.*;
public class MyClass {
public static void main(String args[]) {
    int N=10; // number of students
    double[][] array = new double[3][N];

    for (int i=0;i<3;i++)       
        for (int j=0;j<N;j++)
            array[i][j]= // students scores

    for (int i=0;i<3;i++) {
        double[] temp = new double[N];
        for (int j=0;j<N;j++)
            temp[j]=array[i][j];     // create an array for each subject

            Arrays.sort(temp);     // sort each array
            double median;
            if (temp.length % 2 == 0)   // find median for each case
                median = ((double)temp[temp.length/2] + (double)temp[temp.length/2 - 1])/2;
            else
            median = (double) temp[temp.length/2];
            System.out.println("Median of Subject " +(i+1)+" = " + median);
        }
    }
}

您可以根据需要更改数据类型...

【讨论】:

  • 只包含代码的答案并不是 Stack Overflow 的真正意义所在。我经常对他们投反对票。如果它包含对您的代码在做什么以及为什么您认为它是原始问题的正确答案的某种解释,您的答案会好得多。
猜你喜欢
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多