黑马程序员技术交流社区

标题: 到底哪里错了,恳请请解惑 [打印本页]

作者: 妖精斩月    时间: 2014-7-5 08:23
标题: 到底哪里错了,恳请请解惑
class ArrayDemo
{
        public  static int getMax(int[] arr)
        {
                int max = 0;
               
                for (int x = 1;x<arr.length ;x++ )
                {   
                        if(arr[x]>arr[max])
                                max = x;
                }
                        reture arr[max];
        }

public static void main(String[] args)
        {               
                int[] arr = {5,1,6,4,2,8,9};

                int max = getMax(arr);

                System.out.println("arr="+arr);
        }
}
,为什么运行结果老是数组地址?arr=[I@1fb8ee3?

U0]T7$7$E4NCFDM~0}9]B_M.jpg (77.74 KB, 下载次数: 6)

U0]T7$7$E4NCFDM~0}9]B_M.jpg

作者: 高志鹏1    时间: 2014-7-5 08:29
你是想求最大值,输出的应该是max吧,arr是数组首指针(地址),并且数组的toString是输出地址值
作者: 马到成功2014    时间: 2014-7-5 08:30
数组是需要遍历的 你直接输出是地址
作者: blue_sky    时间: 2014-7-5 08:31
你主函数中,调用了找出最大数的方法后,输出语句是:
        System.out.println("arr="+arr);
要知道,值里面的arr会自动调用toString()方法,就会出现你的这个问题:

修改方法:
        1、如果你想要得到最大的那个数:
        改为: System.out.println("arr="+max);
        2、如果你想要输出这个数组:
          遍历吧!
作者: ahuhxl    时间: 2014-7-5 08:38
楼上正解
作者: 胥亮    时间: 2014-7-5 08:53
System.out.println("arr="+arr);这里的arr是地址,应该改成max
作者: OCTSJimmy    时间: 2014-7-5 09:02
看函数,感觉楼主的目的应该是输出数组中的最大值,所以:
System.out.println("arr="+arr);
改成:
System.out.println("arr="+max);
假如还需要输出max在数组中的索引,可以在函数中多返回一个max,max与arr[max]放到result数组里面,输出的时候可以result[0],result[1]的输出。
作者: zhohao    时间: 2014-7-5 09:14
就是你自己做了个获取最大值的方法,然后没使用,你直接打印了arr的地址值,逻辑有点混乱不知道你这段程序想实现什么功能,如果想打印arr数组那就遍历,要不就直接获取最大值。
作者: Adjin    时间: 2014-7-5 09:27
System.out.println("arr="+arr);
你new一个数组,在堆内存中开辟空间,把地址传给栈内存的arr,等于说用地址引用这个数组,数组是引用数据类型,
你等于把arr的地址打印出来了,你写("max="+max)
作者: 導ぷ仙″兲蕐    时间: 2014-7-5 12:38
你的return打成reture了...而且 System.out.println("arr="+max);应该是这样才能输出最大值,你若想输出数组的值的话可以这样:
System.out.println(Arrays.toString(arr));
作者: 醉、倾鯎    时间: 2014-7-5 16:05
public  class Demo {
        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 void main(String[] args) {
                int[] arr = { 5, 1, 6, 4, 2, 8, 9 };

                int max = getMax(arr);

                System.out.println("arr=" + max);
        }
}
亲 你return都写错了,,,
作者: 霜林醉zhx    时间: 2014-7-5 17:43
最后,你定义了一个为arr的数组,再打印arr,数组不遍历的话,肯定打印的是数组地址
作者: 妖精斩月    时间: 2014-7-5 20:14
马到成功2014 发表于 2014-7-5 08:30
数组是需要遍历的 你直接输出是地址

需要遍历啊,谢谢
作者: 妖精斩月    时间: 2014-7-5 20:16
blue_sky 发表于 2014-7-5 08:31
你主函数中,调用了找出最大数的方法后,输出语句是:
        System.out.println("arr="+arr);
要知道, ...

知道了,感谢解答。
作者: 妖精斩月    时间: 2014-7-5 20:17
OCTSJimmy 发表于 2014-7-5 09:02
看函数,感觉楼主的目的应该是输出数组中的最大值,所以:
System.out.println("arr="+arr);
改成:

现在知道了,呵呵,非常感谢解答
作者: 妖精斩月    时间: 2014-7-5 20:18
zhohao 发表于 2014-7-5 09:14
就是你自己做了个获取最大值的方法,然后没使用,你直接打印了arr的地址值,逻辑有点混乱不知道你这段程序 ...

打算输出最大值,原来是那里错了,感谢你的帮助
作者: 妖精斩月    时间: 2014-7-5 20:21
醉、倾鯎 发表于 2014-7-5 16:05
public  class Demo {
        public static int getMax(int[] arr) {
                int max = 0;

我只求最大值,很感谢您的详细解答
作者: 青程    时间: 2014-7-5 21:15
输出不对




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