黑马程序员技术交流社区
标题:
数组突发奇想
[打印本页]
作者:
罗磊
时间:
2012-6-29 17:53
标题:
数组突发奇想
//想要定义这样一个函数,就是不管是什么类型的数组调用此函数都能返回最小值,所以我就想了用下标表示该最小值,通过实验能成功,但是是要改动传入的数组类型。
//所以想请教下高手!代码中的double能换成什么可以使它能够接收到不同数据类型的数组!
//也就是说让这个函数成为一个求数组最小的万能模版!
public static int minxiabiao(double[] arr) {
int min = 0;
for( int i = 1 ;i < arr.length; i++)
{
if ( arr [ i ] < arr [ min ] )
min = i;
}
return min;
}
作者:
刘笑
时间:
2012-6-29 18:28
楼主可以试试工厂模式。记得在哪里看过,不过我也不太会用,只是提供一个思路,你查一下资料吧
作者:
Forever。
时间:
2012-7-1 13:30
首先不管是什么类型都可以定义成数组,而比较大小的方式又是各有千秋。不过你在方法的参数列表中写成object【】就可以实现传入任何类型的数组了也就是这样:
public static int minxiabiao(
Object[] arr
){}
也许你再比较大小的时候只能比较跟数字有关的吧。如果是一个String你比它的什么大小啊。
作者:
杨_扬
时间:
2012-7-1 17:15
这真的是一个相当有意思的问题,如果要实现楼主说的”万能“我的看法是,这个程序要涉及到自动封装,Comparable接口,和反射机制三方面的知识
首先,楼主要求任意输入一个随便什么类型的数组,都能够统一的实现排序,我楼上给出的观点是将这个数组的数据类型定义为Object型的,的确这是个好思路,但是会出现问题,就是比较大小的操作只能用于实现了Comparable接口的类上
对于楼主的要求,我给出一个设计思路的关键就是先要判断参数数组是否为一个实现了Comparable接口的对象数组
我简单的写了如下的代码
public class HasInterface {
private boolean flag = false;
public void test(Object o){
Class<? extends Object> c = o.getClass();
Class<?>[] interf = c.getInterfaces();
for (int i=0; i<interf.length; i++){
if (interf[i].getName().equals("java.lang.Comparable")){
flag = true;
}
}
}
@Override
public String toString() {
if (flag)
return "true";
else
return "false";
}
}
这里,我先将待排序的数组的第一个元素作为参数传入上面的这个判断函数进行判断,如果判断出数组中的元素是实现了Comparable接口的类的实例,则返回true则便是可以排序操作,进而可以作为楼主给出函数的参数,如果结果是否定的,则不能
楼主给出的函数的参数类型定义为Object.
如果数组是基本数据类型的数组,则其元素作为参数传入我给出的判断函数时JAVA会进行自动装箱操作
需要强调的是,我只是简单的随便写了个程序测试了一下其中有几个细节,如果具体实现的时候还需要额外注意
首先,在进行判断之前要先判断数值是否为空,避免发生空指针异常。
其次,可以将数组整体作为参数传递入判断函数,在判断函数内部再进行空数组,取元素这样的操作。
最后,这个程序还是存在漏洞的,比如待排序数组被定义为Object类型,数组的第一个元素是一个实现了Comparable接口的类的实例而其他的元素不是,那也会造成程序的错误
因此,要完全实现楼主的想法,还需要一些具体的维护操作,这里仅给出思路
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2