使用findKth查找最低,最高,中等和平均分数

时间:2017-03-01 03:54:35

标签: java arrays find median

对于这个项目,我的目标是...... 使用findKth查找最高,最低,中等和平均分数 用户必须输入数字(输入-1以停止扫描仪)并且他们不知道有多少数字以及它们是否已分类 但是,我在尝试这样做时遇到了一些问题。

我提供的findKth方法只接受int [] arr,我找不到一种方法来将数组初始化为该项目的特定大小。

有人可以建议一种方法吗?

以下是我的测试方法和我的findKth

import java.util.*;
 public class Statistics
  {
public static void main(String[]args)
{
    System.out.print("Enter Scores, -1 to end: ");

    Scanner keyboard= new Scanner(System.in);
    String numbers = null;

    while(keyboard.nextInt()!=-1)
    {
        numbers= keyboard.next();
    }


    String[] parts = numbers.split(" ");
    int[] n1 = new int[parts.length];
    for(int n = 0; n < parts.length; n++)
    {
        n1[n] = Integer.parseInt(parts[n]);
    }

    int highest= n1.length-1;
    int lowest=0;
    int median= n1.length/2;

    QuickSort.findKth(n1, highest);
    System.out.println("High: "+n1[highest]);
    QuickSort.findKth(n1, lowest);
    System.out.println("Low: "+n1[lowest]);
    QuickSort.findKth(n1, median);
    System.out.println("Median: "+n1[median]);

}
}

public static void findKth(int[] arr, int k)
{
            findKth(arr, 0, arr.length, k);
}
//Pre:  arr[first]..arr[last-1] contain integers
//  k must be in [first..last-1]
//Post: The elements in arr has been rearranged in such a way that arr[k] now contains the kth
//   largest element
public static void findKth(int[] arr, int first, int last, int k)
{
    int pivotLoc = rearrange(arr, first, last);
        if (pivotLoc==k) return;
        else if (pivotLoc>k) findKth(arr, first, pivotLoc, k);
        else findKth (arr, pivotLoc +1, last, k);
}

我尝试过不同的方法,例如尝试解析数字的字符串,但是我不能这样做,因为当用户输入-1时我无法找到正确停止扫描仪的方法。

我也尝试过使用ArrayList,但是只使用了一个int [] arr的findKth。所以这不起作用。

连连呢?我很难过。

1 个答案:

答案 0 :(得分:1)

使用列表收集输入:

List<Integer> input = new ArrayList<>();

input.add(n); // add each number

然后在所有输入之后转换为数组:

int[] array = input.stream().mapToInt(Integer::intValue).toArray();

您的输入循环错误。虽然超出了问题的范围,但请尝试更简单的循环,例如:

while (true) {
    int n = keyboard.nextInt();
    if (n == -1)
        break;
    input.add(n);
}