黑马程序员技术交流社区

标题: 麻烦大家帮忙看下这串代码最后那个返回值应该怎么写? [打印本页]

作者: ITHM明    时间: 2015-7-31 15:08
标题: 麻烦大家帮忙看下这串代码最后那个返回值应该怎么写?
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);//利用函数重载,但是这个返回值不对.
        }
       

}




作者: nightingale    时间: 2015-7-31 15:33
ar实参是double[]类型的
public static double getMax(double[] ar)
        {
                return getMax(ar); //ar是double[]类型,程序找到的是方法自己,不停自己调用自己,死掉
        }
作者: nightingale    时间: 2015-7-31 15:39
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];
        }
作者: nightingale    时间: 2015-8-1 12:54
额,看得太快了,把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];
        }
作者: 编程小黑    时间: 2015-8-1 12:55
学习了,谢谢楼主分享
作者: nightingale    时间: 2015-8-1 12:56
改漏了。。是这样:
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];
        }
作者: zk338142    时间: 2015-8-1 13:07
ar是个数组,你不能返回数组,你最好返回数组最大值的角标。或者用个double产量接收最大值,在返回这个产量
作者: ITHM明    时间: 2015-8-2 07:49
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])
作者: 白马程序猿    时间: 2015-8-2 08:30
类型不匹配,必须要写函数,参数为DOUBLE 类型的
作者: ITHM明    时间: 2015-8-2 08:42
白马程序猿 发表于 2015-8-2 08:30
类型不匹配,必须要写函数,参数为DOUBLE 类型的

这串代码看着貌似符合重载的条件:同一类下,函数名相同,与返回值类型无关,只要函数的参数类型或者参数个数不同即可使用重载.
作者: myself123    时间: 2015-8-2 09:15
看看重载的格式
作者: yuanyuemao88    时间: 2015-8-2 09:44
程序运行会出现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;
        }




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2