Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 泛型和将数组作为参数传递的问题_Java_Generics - Fatal编程技术网

Java 泛型和将数组作为参数传递的问题

Java 泛型和将数组作为参数传递的问题,java,generics,Java,Generics,所以我在做一个项目时遇到了麻烦。这个项目听起来很简单,我能完成其中的2/3。我必须向我的类MyGenerics添加3个泛型方法。方法如下: a。mymin,其中一个数组(不确定类型)作为参数传入,并返回最小元素 b。接受数组(不确定类型)的max2作为参数传入,并返回最大的两个元素 c。接受数组(不确定类型)的中值作为参数传入,并返回中值 我能很容易地完成a和c。我的问题是b。我不知道如何返回最大值以及第二大值。我最初的想法是获取数组中的初始最大值,然后删除它并再次获取最大值,这样“新”的最大值

所以我在做一个项目时遇到了麻烦。这个项目听起来很简单,我能完成其中的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
,这可能会有所帮助