2017-12-03 394 views
0

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

任何帮助,提示或建议从我应该开始真的很感激。

+1

鉴于布局,你真的不能。您需要转置二维数组,以便您有三个数组,每个数组都包含一个主题的所有标记 - 然后可以对数组进行排序并获取中值。 –

+0

您可以使用Arrays类的重载函数对数组进行排序。 – quantumThinker

回答

-1

考虑到arr是包含double值的二维数组。使用下面的代码

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

这里阵列比较都可用下的java.util包。 如果你使用的是java 8,这可以在一行中完成。

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

你的第一个代码片段至少有两个编译错误。但更糟的是,你没有解释你的代码在做什么,或者你为什么认为这是问题的答案。我低估了,不是因为错误,而是因为缺乏解释。 –

-1

你可以用户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); 
     } 
    } 
} 

你可以改变数据类型,只要你想......

+0

谢谢你的所有建议,我会尝试一下,我让你知道.. –

+0

只包含代码的答案并不真正是什么堆栈溢出是关于。我经常冷静下来。如果您的答案包含某种关于您的代码正在做什么的解释,以及为什么您认为这是对原始问题的正确答案,那么您的答案会更好。 –