黑马程序员技术交流社区
标题:
关于任意数字类型的数组求最大值解决办法
[打印本页]
作者:
曹睿翔
时间:
2013-5-20 14:54
标题:
关于任意数字类型的数组求最大值解决办法
本帖最后由 曹睿翔 于 2013-5-20 14:59 编辑
前几天“圣手书生”问到,怎么扩展一个函数,让其能求出任意数字类型的数组求最大值。可惜当时没解决出来。
有两种思路:
一种是重载方式(就是有几种数字数组就写几个重载方法,因为Arrays中的toString()方法就是这么干的(黄玉昆给的解释,很好),毕竟基本数据类型没封装类好操作)。
另一种是利用反射(开始我想的也是这种,可是没有想到结合集合去解决在数组类型未知时怎么比较大小,问了下老师得到了满意的答复)
不能像这样用泛型getMax(T[]),因为T[]不接收基本类型的数组。
代码如下:
//这是关键:
因为不确定数组的数据类型,无法用>比较大小,可以考虑是用集合工具了Collections的max()方法
public static Object getMax(Object arr) {
Class clazz = arr.getClass();
List list = new ArrayList();
int length = 0;
if (clazz.isArray()) { // 判断是不是数组
length = Array.getLength(arr);
Class componentType = clazz.getComponentType(); // 获得数组的类型
if (componentType == int.class || componentType == double.class
|| componentType == float.class
|| componentType == long.class) {
for (int i = 0; i < length; i++) {
// 如果是基本类型的数字数组,需要手动添加到集合
list.add(Array.get(arr, i));
}
} else if (componentType == Integer.class
|| componentType == Float.class
|| componentType == Double.class
||componentType == Long.class) {
// 如果是包装类型,用Arrays的asList()方法
Object[] newArr = (Object[]) Array.newInstance(componentType,
length);
System.arraycopy(arr, 0, newArr, 0, length);
list = Arrays.asList(newArr);
} else {
throw new RuntimeException("请出入数字数组");
}
} else {
throw new RuntimeException("请输入数组");
}
return Collections.max(list);
}
public static void main(String[] args) {
int[] ins = { 1, 2, 3, 4, 17 };
double[] ds = { 123.323, 123.54, 328.0 };
float[] fs = { 123.5f, 32.4f };
Integer[] in = { 1, 2, 3, 4, 17 };
Double[] d = { 123.323, 123.54, 328.0 };
System.out.println(getMax(ins));
System.out.println(getMax(ds));
System.out.println(getMax(fs));
System.out.println(getMax(in));
System.out.println(getMax(d));
}
}
复制代码
作者:
Jacky_Chen1990
时间:
2013-5-20 14:58
曹帮主。我来帮顶了! 我还欠你一些东西。。。最近忙着交入学测试题了!对不住你!晚点就补齐!
作者:
神之梦
时间:
2013-5-20 15:05
哇,这个可以有{:soso_e179:}
作者:
刘胜寒
时间:
2013-5-20 17:20
看来我的思路,还是比较正确的。。。
作者:
刘胜寒
时间:
2013-5-20 21:39
刘胜寒 发表于 2013-5-20 17:20
看来我的思路,还是比较正确的。。。
还不是被你给坑了。每个数组里面包含各种number的子类。
作者:
Miss小强
时间:
2013-5-21 00:31
反射数组的神器:Array工具类。。。老曹果然厉害。。。
作者:
Miss小强
时间:
2013-5-21 00:37
//这是关键:因为不确定数组的数据类型,无法用>比较大小,可以考虑是用集合工具了Collections的max()方法
对这句话有点小疑问:
是否可以使用工具类Arrays。sort(Object[] arr);//先排序在取最后一个。。。
关键是不是可以使用Arrays来操作。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2