我试图对数组中的数字进行排序,但我似乎正在制作我的方法" runnerTimes"不正确。
我希望它是在我调用方法" runnerTimes"任何数量的数字,所以它会自动对数字进行排序并打印出最高的两个数字。
这样我输入了runnerTimes([1,2,3,4,5]),然后回来了5和4。
现在我可以通过向方法中添加(int,int,int ...)来实现这一点......但是我希望它能够自动检测数组中的元素数量并根据它进行排序。
建议?
import java.util.Arrays;
public class boston_marathon {
// Take a list of times in an array, and show the top 2 times.
public static void runnerTimes(int[] times) {
Arrays.sort(times);
System.out.println("The top two times are: " + times[0] + " " + times[1]);
}
public static void main(String[] args) {
runnerTimes(1, 2, 3);
runnerTimes(4, 5, 6, 7);
}
}
答案 0 :(得分:2)
对于获取整数数组的两个最高值,排序是过度的。它可以在O(n)
时间内完成,保持两个变量对应于到目前为止在阵列的单个扫描中看到的两个最高值。
答案 1 :(得分:0)
如果我理解了您的问题,那么您可以使用variadic function之类的
public static void main(String[] args) {
int[] r = runnerTimes(5, 4, 3, 2, 1);
System.out.println(Arrays.toString(r));
}
public static int[] runnerTimes(int... times) {
Arrays.sort(times);
return Arrays.copyOfRange(times, times.length - 2, times.length);
}
输出(按要求)
[4, 5]
答案 2 :(得分:0)
Array.sort(int[] a)
按指令数字升序对指定数组进行排序。使用此排序方法,您必须打印已排序数组的最后两个元素。
顺便说一句,您希望将前两个元素作为最大数字,并且可以使用sort(T[] a, Comparator<? super T> c)
(只需指定您的比较器)。
用法:http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#sort(T[],%20java.util.Comparator)