所以,我必须编写一个通用方法来找到二维数组中的最大元素,然后我必须使用整数,字符串和对象进行测试。
我有点睡眠不足,所以我为这可能是一个非常简单的修复道歉。
我有我的通用方法:
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;
}
}
并且只是尝试先用整数进行测试
public class GenericTester {
public static void main(String[] args) {
Integer[][] myArray = { {0,1,2,3}, {3,2,1,0}, {3,5,6,1}, {3,8,3,4} };
System.out.println(Generic.Max(myArray));
}
}
好的我修复了上一个错误,愚蠢的错误,但现在我得到了Generic类型的方法Max(T [] [])不适用于参数(int [] [])
这个问题的最佳方法是什么?
感谢您提供的任何帮助
答案 0 :(得分:4)
大概你需要Generic.Max(myArray)
或者你需要
import static Generic.Max;
位于GenericTester.java
的顶部。
泛型不适用于基本类型,因此T
无法绑定到int
。请特别注意,int
不会延伸Comparable<int>
。您将需要使用Integer[][]
数组而不是int
,对于其他基本类型也是如此。
编辑除了上述内容之外,您的循环还需要一些工作。首先,内循环的增量是错误的(这就是你看到ArrayIndexOutOfBoundsException
的原因)。其次,您的代码要求矩阵是正方形和完整的(因为您使用stuff.length
作为内部循环限制)。这是我写它们的方式(使用enhanced for
loop语法):
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;
}
}
对于真正通用的方法,您需要检查stuff[0][0]
是否存在。