Java 二维数组中求最大值的一般方法

Java 二维数组中求最大值的一般方法,java,generics,max,multidimensional-array,Java,Generics,Max,Multidimensional Array,所以伙计们,我必须写一个通用方法来找到二维数组中的最大元素,然后我必须使用整数、字符串和对象进行测试 我有点睡眠不足,所以我很抱歉这可能是一个非常简单的解决办法 我有我的通用方法: public class Generic { public static <T extends Comparable<T>> T Max(T[][]stuff) { T max = stuff[0][0]; for (int i = 0; i <

所以伙计们,我必须写一个通用方法来找到二维数组中的最大元素,然后我必须使用整数、字符串和对象进行测试

我有点睡眠不足,所以我很抱歉这可能是一个非常简单的解决办法

我有我的通用方法:

public class Generic {

    public static <T extends Comparable<T>> T Max(T[][]stuff) {
        T max = stuff[0][0];
        for (int i = 0; i < stuff.length; i++)
            for(int j = 0; j <stuff.length; i++)
                if (stuff[i][j].compareTo(max) > 0)
                    max = stuff[i][j];
        return max;
    }
}
好的,我修复了前面的错误,愚蠢的错误,但是是的,现在我得到了泛型类型中的方法Max(T[][])不适用于参数(int[][])

解决此问题的最佳方法是什么


感谢您提供的所有帮助

您可能需要
Generic.Max(myArray)
或者您需要

import static Generic.Max;
generictest.java
的顶部

泛型不能与基元类型一起使用,因此
T
不能绑定到
int
。请特别注意,
int
不扩展
Comparable
。您需要使用
Integer[][]
数组,而不是
int
,对于其他基元类型也是如此

编辑除上述内容外,您的循环还需要一些工作。首先,内部循环的增量是错误的(这就是为什么您会看到
ArrayIndexOutOfBoundsException
)。其次,您的代码要求矩阵是正方形和完整的(因为您使用
stuff.length
作为内部循环限制)。下面是我将如何编写它们(使用语法):

公共类泛型{
公共静态T最大值(T[]{
T max=stuff[0][0];
对于(T[]行:stuff){
对于(T elt:row){
如果(elt.比照(最大值)>0){
max=elt;
}
}
}
返回最大值;
}
}

对于真正通用的方法,您需要检查
stuff[0][0]
是否存在。

您可能需要
Generic.Max(myArray)
,否则您需要

import static Generic.Max;
generictest.java
的顶部

泛型不能与基元类型一起使用,因此
T
不能绑定到
int
。请特别注意,
int
不扩展
Comparable
。您需要使用
Integer[][]
数组,而不是
int
,对于其他基元类型也是如此

编辑除上述内容外,您的循环还需要一些工作。首先,内部循环的增量是错误的(这就是为什么您会看到
ArrayIndexOutOfBoundsException
)。其次,您的代码要求矩阵是正方形和完整的(因为您使用
stuff.length
作为内部循环限制)。下面是我将如何编写它们(使用语法):

公共类泛型{
公共静态T最大值(T[]{
T max=stuff[0][0];
对于(T[]行:stuff){
对于(T elt:row){
如果(elt.比照(最大值)>0){
max=elt;
}
}
}
返回最大值;
}
}

对于一个真正通用的方法,您需要检查
stuff[0][0]
是否存在。

这是OP在修复他所询问的问题后将遇到的下一个问题。@JasonC-当然,假设
generictest
没有导入静态Generic.Max。这将生成
方法Max(t[])在类型中,泛型不适用于参数(int[]])
。我更新了代码以修复你们指出的问题,并修复了该错误,但你们是正确的,这就是我现在遇到的错误。这将如何修复?thaks@user2745043泰德·霍普在回答的第二部分中清楚地解释了这一点。您不能将
int
(或任何基元类型)绑定到泛型类型,尽管您可以使用
Integer
。这是OP在解决他所询问的问题后遇到的下一个问题。@JasonC-当然,假设,那
GenericTester
没有导入静态Generic.Max。那会生成
类型Generic中的方法Max(t[]])不适用于参数(int[]])
。我更新了代码来修复你们指出的错误,它修复了那个错误,但你们都是正确的,这就是我现在遇到的错误。这将如何修复?thaks@user2745043泰德·霍普在回答的第二部分中清楚地解释了这一点。不能将
int
(或任何基元类型)绑定到泛型类型,但可以使用
Integer
public class Generic {
    public static <T extends Comparable<T>> T Max(T[][]stuff) {
        T max = stuff[0][0];
        for (T[] row : stuff) {
            for (T elt : row) {
                if (elt.compareTo(max) > 0) {
                    max = elt;
                }
            }
        }
        return max;
    }
}