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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class ArrayTest
{
        public static void main(String[] args)
        {       
                int[] arr = {1,2,3,4,5,6,7};

                double[] ar = {1.1,2.2,3.3,4.4,5.5,6.6};

                int max = getMax(arr);
                System.out.println("max="+max);
               
                double max2 = getMax(ar);
                System.out.println("max2="+max2);
        }
       
        public static int getMax(int[] arr)
        {
                int max = 0;
               
                for(int x = 1;x<arr.length;x++)
                {
                        if(arr[x]>arr[max])
                                max = x;
                }
                return arr[max];
        }

        public static double getMax(double[] ar)
        {
                return getMax(ar);//利用函数重载,但是这个返回值不对.
        }
       

}



13 个回复

正序浏览
程序运行会出现StackOverflowError
  public static double getMax(double[] ar)
        {
                return getMax(ar);//利用函数重载,但是这个返回值不对.
        }
这个方法中进行了无限的递归,没有结束点,直至栈满报错。
重写double getMax(double[] ar)的方法为
public static double getMax(double[] ar)
        {
               // return getMax(ar);//利用函数重载,但是这个返回值不对.
                            
                double max = ar[0] ;
                for(int x = 1;x<ar.length;x++)
                {
                        if(ar[x]>max)
                                max = ar[x] ;                                                       
                }
                return max;
        }

点评

确实是陷入循环了!看了不少哥们的分析,几乎都认同这串代码不可以使用函数的重载.感谢你的分析!  发表于 2015-8-2 10:06
回复 使用道具 举报
看看重载的格式
回复 使用道具 举报
白马程序猿 发表于 2015-8-2 08:30
类型不匹配,必须要写函数,参数为DOUBLE 类型的

这串代码看着貌似符合重载的条件:同一类下,函数名相同,与返回值类型无关,只要函数的参数类型或者参数个数不同即可使用重载.
回复 使用道具 举报
类型不匹配,必须要写函数,参数为DOUBLE 类型的
回复 使用道具 举报
nightingale 发表于 2015-8-1 12:56
改漏了。。是这样:
public static double getMax(double[] ar)
        {

把double getMax这个函数写详细确实是可以达到预期效果.但函数里面的代码跟int类型的同名函数重复了.从而并没有用到函数的重载.或许这串代码根本就没法用到函数的重载吧!还是谢谢你!PS: if(arr[x]>arr[max])应该为if(ar[x]>ar[max])
回复 使用道具 举报
zk338142 来自手机 中级黑马 2015-8-1 13:07:19
7#
ar是个数组,你不能返回数组,你最好返回数组最大值的角标。或者用个double产量接收最大值,在返回这个产量
回复 使用道具 举报
改漏了。。是这样:
public static double getMax(double[] ar)
        {
                int max = 0;
               
                for(int x = 1;x<ar.length;x++)
                {
                        if(arr[x]>arr[max])
                                max = x;
                }
                return ar[max];
        }
回复 使用道具 举报
学习了,谢谢楼主分享
回复 使用道具 举报
额,看得太快了,把max看成是元素了。

其实要达到目的,把重载方法的内容写详细不就可以了??

public static int getMax(double[] ar)
        {
                int max = 0;
               
                for(int x = 1;x<ar.length;x++)
                {
                        if(arr[x]>arr[max])
                                max = x;
                }
                return ar[max];
        }
回复 使用道具 举报
public static int getMax(int[] arr)
        {
                int max = 0;  //这里也有问题啊,万一传进来的数组元素全是负数呢?那这个初始化值不就变成最大值?显然不行啊。改成 max = arr[0];另外还有些小细节,接收到arr时应该先判断一下arr是否为空,空就没最大值了。
               
                for(int x = 1;x<arr.length;x++)
                {
                        if(arr[x]>arr[max])
                                max = x;
                }
                return arr[max];
        }

点评

感谢你细心的分析!int max = 0;//这个地方的max是角标位,并非数组中的元素. 还有第二个double函数你分析得没错,但我想知道的是正确的返回值应该是什么?  发表于 2015-7-31 18:55
回复 使用道具 举报
ar实参是double[]类型的
public static double getMax(double[] ar)
        {
                return getMax(ar); //ar是double[]类型,程序找到的是方法自己,不停自己调用自己,死掉
        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马