繁体   English   中英

返回二维数组最大值的方法 Java

[英]Method that returns the maximum of a 2D-Array Java

public static <E extends Comparable<E>> E getMaxElement(E[][] list){
    E theMaximumElement = new E();
    for (int i = 0; i <list.length ; i++) {
        for (int j = 0; j <list[i].length ; j++) {

            if(theMaximumElement.compareTo(list[i][j]))
                theMaximumElement = list[i][j];
        }
    }
    return theMaximumElement;
}

我怎样才能写好这段代码? 这是真的吗?

我想找到最大元素。 我不擅长java中的Generics。

您的代码中有两个问题:

  • Comparable::compareTo方法不返回booleanint 以下是该方法的说明:

    比较其两个 arguments 的订单。 返回负 integer、零或正 integer,因为第一个参数小于、等于或大于第二个。 在前面的描述中,符号sgn(表达式)表示数学符号function,它被定义为根据表达式的值是负数、零还是正数返回-1、0或1之一。

  • 您不能实例化通用 object,例如new E() 在 java 中检查实例化 generics 类型

这是 go 的一种方法:

public static <E extends Comparable<E>> E getMaxElement(E[][] list) {

    E theMaximumElement = list[0][0];                // initial value (the first one)
    for (final E[] array : list) {
        for (final E e : array) {
            if (theMaximumElement.compareTo(e) < 0)  // comparison is against 0
                theMaximumElement = e;               // setting the new maximum value
        }
    }
    return theMaximumElement;                        // returning it
}

唯一的条件是元素list[0][0]存在,即arrays 不为空。 否则,您应该修改解决方案以使用Optional<E>因为并不总是找到最大值(空数组)。

从 Java 8 开始,有一种使用处理此类用例的简单方法:

Optional<E> optionalmaximum = Arrays.stream(list)                    // Stream<E[]>
                                    .flatMap(Arrays::stream)         // Stream<E>
                                    .max(Comparator.naturalOrder()); // Optional<E>

这是我的版本:

public static <E extends Comparable<E>> E getMaxElement(E[][] list) {
    if (list.length <= 0)
        return null;

    E theMaximumElement = list[0][0];

    for (int i = 0; i < list.length; i++)
        for (int j = 0; j < list[i].length; j++)
            if (list[i][j].compareTo(theMaximumElement) > 0)
                theMaximumElement = list[i][j];

    return theMaximumElement;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM