黑马程序员技术交流社区

标题: 选择排序部分的疑问 [打印本页]

作者: 张得贵    时间: 2013-5-18 11:09
标题: 选择排序部分的疑问
本帖最后由 张得贵 于 2013-5-18 15:10 编辑

在选择排序那部分,讲到排序方法返回值的时候,为什么是void类型,它不是返回一个数组吗?毕老师的解释是它是同一个数组实体,只是多个引用在操作这个数组实体,所以不用返了。我反复看了几遍还是不能理解,是我想歪了吗?求简单通俗的解释。
           public static void selectSort(int[] arr)
        {
                for (int x=0; x<arr.length-1 ; x++)
                {
                        for(int y=x+1; y<arr.length; y++)
                        {
                                if(arr[x]>arr[y])
                                {
                                        int temp = arr[x];
                                        arr[x] = arr[y];
                                        arr[y]= temp;
                                       
                                }
                        }
                }
        }
作者: 余威宏    时间: 2013-5-18 11:32
本帖最后由 余威宏 于 2013-5-18 12:10 编辑

void的意思是“空”,是java中的关键字,在方法申明的时候表示该方法没有返回值。
比如
public void result()
{
}
如果void换成了其它,如int,string,数组,对象等等之类的话,那么就要用return来返回值,比如:
public int result()
{
  return 1;
}
方法里可以不用写任何代码,直接返回值。

   希望楼主能够明白。我们一起努力吧!!!哈哈~~
——————————黑马云青年  为你解答!

作者: 袁梦希    时间: 2013-5-18 11:45
本帖最后由 袁梦希 于 2013-5-18 12:25 编辑

其实毕老师讲的我也整不明白,按我的理解呢  我就用大白话说了  一个传入数组的方法,说明这个方法对这个数组进行操作了,
因为呢老毕说的“它是同一个数组实体”,是因为他在数组中是同一个数组对象,只是里面的元素进行了排序,他还是同一个对象,只是内容不同了。
所以当操作数组的时候,可以不用返回值,也能对数组进行操作了。

所以改变堆内存中是同一个对象,只是内容不一样了

黑马云青年为您解答

作者: 神之梦    时间: 2013-5-18 11:46
其实比老师讲得已经比较清楚了吧,楼主明白数组在内存中的分配问题就一定可以明白。
int [] arr  这个形参接收的实参是一个地址值。这个地址值是被赋值给arr存放在栈内存中。
而函数中对数组元素的操作是在堆内存中进行的。
要返回也是返回一个存储了地址值的数组变量就行了,但是我们只要把数组中的元素排序完了就成了。多个数组变量指向同一个地址,那我们就用实参的数组变量来表示就OK了嘛,所以就没必要去返回东东了。
                                                         ——————————黑马云青年  为你解答!
                                                                             又开始赚团长金币{:soso_e120:}
作者: 袁梦希    时间: 2013-5-18 11:49
神之梦 发表于 2013-5-18 11:46
其实比老师讲得已经比较清楚了吧,楼主明白数组在内存中的分配问题就一定可以明白。
int [] arr  这个形参 ...

回帖本身就俩金币,我在给你三个   你一回帖子 一下就赚5金币   来钱真快啊  哈哈哈哈
作者: 余威宏    时间: 2013-5-18 12:11
余威宏 发表于 2013-5-18 11:32
void的意思是“空”,是java中的关键字,在方法申明的时候表示该方法没有返回值。
比如
public void result ...

嘿嘿 修改好了,刚才忘了规则啦。。
作者: 尹丽峰    时间: 2013-5-18 12:20
【黑马云青年为您解答】
数组的返回值不能是数组整体,返回值类型只能为基本数据类型+String,
数组只能通过遍历取得其中元素
简单代码 public void say(String str){}
public int age(int age){return age}
作者: 韩秀山    时间: 2013-5-18 12:22
public static void selectSort(int[] arr)//参数是传入想要排序的数组;

给我的感觉是:他直接在数组的空间中,帮你把数据进行比较了。不需要在取出来比较,在把比较好的结果返回进去;

和++这个运算符有点类似;

我不知道说的对不对,希望能回复一下。一定要指点一下。不然我会睡不好觉的。




作者: To    时间: 2013-5-18 14:53
黑马云青年为你解答:毕老师说,是同一个数组实体,在队内存中为一个对象。所以无需返回值类型。直接用 void 说简单一点。就是节省代码量了不是!我这么理解!

                                                     
作者: 张得贵    时间: 2013-5-18 15:24
袁梦希 发表于 2013-5-18 11:45
其实毕老师讲的我也整不明白,按我的理解呢  我就用大白话说了  一个传入数组的方法,说明这个方法对这个数 ...

谢谢。。
作者: 张得贵    时间: 2013-5-18 15:30
袁梦希 发表于 2013-5-18 11:45
其实毕老师讲的我也整不明白,按我的理解呢  我就用大白话说了  一个传入数组的方法,说明这个方法对这个数 ...

就喜欢这样的。。哈哈。。谢谢。。
作者: chouwayメ    时间: 2013-5-18 16:29
本帖最后由 chouwayメ 于 2013-5-18 16:30 编辑

方法selectSort()的参数 传入了的是数组引用变量 ,也就是该变量所指向的堆内存的地址值。
而之后在方法中对数组的操作都直接改变了数组的内容。此时实参int[] arr (你传入的引用变量)其指向的数组的内容已经发生变化了。
也就是说:
我们要的是选择排序后的数组,而经方法操作后已经作到这点了,所以就不用返还了。

-------黑马云青年为您解答  赚翻团长的钱。。




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