在二维数组中找到最大的通用方法

时间:2013-11-18 00:46:04

标签: 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 < 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 [] [])

这个问题的最佳方法是什么?

感谢您提供的任何帮助

1 个答案:

答案 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]是否存在。