Java方法,用于从数组的排序副本中打印前20%的值

时间:2014-02-17 00:55:14

标签: java arrays percentage percentile

这是我到目前为止的代码。我甚至不确定我是否正确创建了复制的排序数组。整个80%-percentile认为让我感到困惑,所以我不知道如何完成这段代码。任何想法都会非常有用。

public static int top_20(int[]arr, int size){
     Arrays.sort(arr);
     int[] sorted = new int[size];
     for(int i = 0; i < size; i++){
         sorted[i] = arr[i];
     }
}

3 个答案:

答案 0 :(得分:0)

您只需正确设置for周期即可。在前20%的情况下,它会像

for (int i = (int) (size * 0.8); i < size; i++)

您还可以使用arr.length来确定数组的大小。第一部分size * 0.8用于确定,从哪里开始,(int)切断小数部分,以获得int,可以用作索引。最后,您希望最多size,(或arr.length)。这将打印出数组的前20%元素,并且舍入引入了一些小的不准确性。

答案 1 :(得分:0)

从头开始。将问题陈述分解成小块,并解决它们。

  1. 你如何计算百分比?应用这些知识来计算有多少是数组的20%。

  2. 根据这个数字,你需要什么范围的数组索引?

  3. 如何打印数字?

  4. 如何打印一系列数字?

答案 2 :(得分:0)

public static int[] top_20(int[] arr){
     Arrays.sort(arr);

     int size = (int)(arr.length * 0.2); // size is 20% of array
     int start = (int)(arr.length * 0.8); // start at the 80th percentile

     int[] top20 = new int[size + 1];

     for(int i = start; i < arr.length; i++){
         top20[i - start] = arr[i];
     }

     return top20;
}

public static void main(String[] args) {

    int[] x = {92,92,93,94,98,72,75,79,80}; // maybe a class' marks

    System.out.println(Arrays.toString(top_20(x))); // [94, 98]
}