A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗磊 中级黑马   /  2012-6-29 17:53  /  1933 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//想要定义这样一个函数,就是不管是什么类型的数组调用此函数都能返回最小值,所以我就想了用下标表示该最小值,通过实验能成功,但是是要改动传入的数组类型。
//所以想请教下高手!代码中的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 20:47

3 个回复

倒序浏览
楼主可以试试工厂模式。记得在哪里看过,不过我也不太会用,只是提供一个思路,你查一下资料吧
回复 使用道具 举报
首先不管是什么类型都可以定义成数组,而比较大小的方式又是各有千秋。不过你在方法的参数列表中写成object【】就可以实现传入任何类型的数组了也就是这样:
public static int minxiabiao(Object[] arr){}
也许你再比较大小的时候只能比较跟数字有关的吧。如果是一个String你比它的什么大小啊。
回复 使用道具 举报
这真的是一个相当有意思的问题,如果要实现楼主说的”万能“我的看法是,这个程序要涉及到自动封装,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接口的类的实例而其他的元素不是,那也会造成程序的错误
因此,要完全实现楼主的想法,还需要一些具体的维护操作,这里仅给出思路

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 新手报到,鼓励!!!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马