Java 泛型和将数组作为参数传递的问题
所以我在做一个项目时遇到了麻烦。这个项目听起来很简单,我能完成其中的2/3。我必须向我的类MyGenerics添加3个泛型方法。方法如下: a。mymin,其中一个数组(不确定类型)作为参数传入,并返回最小元素 b。接受数组(不确定类型)的max2作为参数传入,并返回最大的两个元素 c。接受数组(不确定类型)的中值作为参数传入,并返回中值 我能很容易地完成a和c。我的问题是b。我不知道如何返回最大值以及第二大值。我最初的想法是获取数组中的初始最大值,然后删除它并再次获取最大值,这样“新”的最大值将是第二高的值。这是我的密码:Java 泛型和将数组作为参数传递的问题,java,generics,Java,Generics,所以我在做一个项目时遇到了麻烦。这个项目听起来很简单,我能完成其中的2/3。我必须向我的类MyGenerics添加3个泛型方法。方法如下: a。mymin,其中一个数组(不确定类型)作为参数传入,并返回最小元素 b。接受数组(不确定类型)的max2作为参数传入,并返回最大的两个元素 c。接受数组(不确定类型)的中值作为参数传入,并返回中值 我能很容易地完成a和c。我的问题是b。我不知道如何返回最大值以及第二大值。我最初的想法是获取数组中的初始最大值,然后删除它并再次获取最大值,这样“新”的最大值
public class MyGenerics {
public static void main(String[] args) {
Integer intArray[] = { 13, 25, 46, 65, 12, 23};
Double doubleArray[] = {1.2, 3.4, 1.1, 0.1, 5.6};
String stringArray[] = {"H", "E", "L", "L", "O"};
System.out.println("The smallest number is: " + myMin(doubleArray));
System.out.println("The median is: " + median(doubleArray));
System.out.println("The median is: " + median(stringArray));
System.out.println("The max is: " + max2(intArray));
}
public static <E extends Comparable<E>> E myMin(E... elements) {
E min = elements[0];
for (E element : elements) {
if (element.compareTo(min) < 0) {
min = element;
}
}
return min;
}
public static <E extends Comparable<E>> E max2(E... elements) {
E max = elements[0];
for (E element : elements) {
if (element.compareTo(max) > 0) {
max = element;
}
}
return max; <-- so obviously this returns the max value of the elements
how can i return the max, as well as the second largest value?
}
public static <E extends Comparable<E>> E median(E... elements) {
Arrays.sort(elements);
E median = elements[elements.length/2];
return median;
}
}
公共类MyGenerics{
公共静态void main(字符串[]args){
数组中的整数[]={13,25,46,65,12,23};
双双数组[]={1.2,3.4,1.1,0.1,5.6};
字符串字符串数组[]={“H”、“E”、“L”、“L”、“O”};
System.out.println(“最小的数字是:“+myMin(doubleArray));
System.out.println(“中值为:“+中值(双数组));
System.out.println(“中值为:“+median(stringArray));
System.out.println(“最大值为:“+max2(intArray));
}
公共静态E myMin(E…元素){
E min=元素[0];
对于(E元素:元素){
如果(元素比较到(最小值)<0){
最小=元素;
}
}
返回最小值;
}
公共静态E max2(E…元素){
E max=元素[0];
对于(E元素:元素){
如果(元素比较(最大值)>0){
最大值=元素;
}
}
return max;数组是低级构造;通常使用集合API
我不确定您的困惑是关于生成2长度数组,还是关于查找前2个元素
如果是前者:
创建泛型类型的新数组通常是不可能的(因为擦除),但在这种情况下,您可以从现有数组中删除:
E[] out = (E[]) java.lang.reflect.Array.newInstance(elements.getClass().getComponentType(), 2);
是的,丑陋、怪异、复杂,并且会产生一些你不得不忽略的泛型警告
至于跟踪2个最大的部分,您可以使用到目前为止使用的相同技巧,只是进行更多比较(将任何数字与最大值和第二个数字与最大值进行比较)
另一个选项是对数组进行排序,只返回最后2个元素。有array.sort
,这可能会有所帮助