黑马程序员技术交流社区

标题: 数组排序基础问题【已解决】 [打印本页]

作者: 孙峰    时间: 2012-5-15 23:43
标题: 数组排序基础问题【已解决】
本帖最后由 孙峰 于 2012-5-16 10:18 编辑

应该是哪个基础性的知识点,往各位指教。谢谢。

QQ截图20120515234202.png (23.11 KB, 下载次数: 36)

QQ截图20120515234202.png

作者: 崔陈喜    时间: 2012-5-16 00:10
调用方法来进行互换操作是非常方便和符合人类思想习惯的。
我们在编写写代码是对重复使用的方法尽量将其分割开来以便我调用
也可以提高代码的复用性。
在这个地方我没有发现有什么错误,可能是你没有进行重新编译。
你可以重新编译试试。
作者: 云惟桉    时间: 2012-5-16 00:14
本帖最后由 云惟桉 于 2012-5-16 00:16 编辑

建议楼主是用一下方式进行交换:
public static void swap(int[] arr, x , y){
         int temp = arr[x];
         arr[x] = arr[y];
         arr[y] = temp;
}
这里可能不是很好理解,这个细节经常使人迷糊。
实际上,用楼主的方式,这里举例一下:
  x----> arr[x] = 3
  y----> arr[y] = 66
x和y是楼主定义的互换函数的参数,你这个函数里,传入的是arr[x]和arr[y]的数据值
利用楼主的方式交换以后,实际上是交换了x和y的的值,但是只是对两个整型值的拷贝值操作,实际上arr里的值并没有改变。

如果使用我上面举出的方式,那么你把一个数组做参数传入,对这个数据进行的修改,都会保留到原来的数组上。
这是java里方法参数一个非常抽象的问题,楼主只要记住两点:
方法参数共有两种类型:1.基本数据类型   2.对象引用
当你把数组做参数传入,就是对象引用,你所做的改变都会附加到引用的那个对象上,即数组上。
当你把数组元素作参数传入,就是基本数据类型,任何改值都不会叠加到对应的数据上。

当然,数组里存放的是对象,那就另当别论了,楼主也可以自己思考一下存放对象是怎样的情形。
希望能帮到你!
作者: 李啸    时间: 2012-5-16 00:30
首先你的方法huhuan(arr[x],arr[y])这里面传的是两个值类型对吧 你方法内部操作的是这两个形参 不是你实际传进去的值 所以你的值没有你预想的效果 把你注释掉的代码取回来   把那个方法干掉  

作者: 黄奕豪    时间: 2012-5-16 00:43
本帖最后由 黄奕豪 于 2012-5-16 00:47 编辑

楼主,我觉得你应该忘了函数调用中参数传递的方式的问题,函数参数传递的方式有值传递和地址传递,你回头看看你的程序,调用paixv(arr)的时候传递的是数组的地址,所以你在定义paixv函数里面直接换了需要换位的数据,这个是正确!但当你调用huhuan(arr[x],arr[y])时却是用的值传递的调用,值传递就是把arr[x]和arr[y]里面的值拷贝一份传给huhuan(int x, int y)里面的x和y,在huhuan(int x, int y)函数里面转换的是arr[x]和arr[y]拷贝出来的x和y的值,跟原值arr[x]和arr[y]无关,所以数组没变化!!

希望楼主能明白!!
(附:这个解析是我们以前学C和C++时候的说法,我是Java菜鸟,不知道这样的解析在Java中能否用,不知道我这个算不算另类啊!!汗!!!)
作者: 杨康    时间: 2012-5-16 01:11
调用互换功能时,你的定义格式你检查是否出现了问题,应该是huhuan(int[] arr, int x, int y),你没有将数组传送进huhuan函数的参数列表。
作者: 孙峰    时间: 2012-5-16 10:16
云惟桉 发表于 2012-5-16 00:14
建议楼主是用一下方式进行交换:
public static void swap(int[] arr, x , y){
         int temp = arr[x] ...

谢谢,受用了
作者: 孙峰    时间: 2012-5-16 10:16
黄奕豪 发表于 2012-5-16 00:43
楼主,我觉得你应该忘了函数调用中参数传递的方式的问题,函数参数传递的方式有值传递和地址传递,你回头看 ...

明白了,可以这样理解




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