黑马程序员技术交流社区

标题: 请问为什么这个程序不交换数组里面的数 [打印本页]

作者: zlloyd    时间: 2017-7-6 17:49
标题: 请问为什么这个程序不交换数组里面的数
本帖最后由 zlloyd 于 2017-7-7 23:36 编辑

class Bijiao
{
        public static void main(String[] args)
        {
                int[] arr={1,2};
                swap(arr,arr[0],arr[1]);
                print(arr);
        }
        public static void swap(int[] arr,int a,int b)
        {
                int temp=a;
                a=b;
                b=temp;
        }
        public static void print(int[] arr)
        {
                for(int x=0;x<arr.length;x++)
                {
                        System.out.println(arr[x]);
                }
        }
}

swap换成
public static void swap(int[] arr,int a,int b)
        {
                int temp=arr[a];
                arr[a]=arr;
               
arr=temp;
        }就能?
public static void swap(int[] arr,int a,int b)
        {
                int temp=a;
                a=b;
                b=temp;
        }
我主要是不明白这里,因为我之前定义了一个整型数组,所以数组里面的数都是整数,
然后我用swap(arr,arr[0],arr[1]),也就是说,在这里a=arr[0];b=arr;可是结果就是这俩个数不调换,问题是出在这里   但是我感觉没错    是不是哪里没有搞清楚原理?

作者: QQ1002730074    时间: 2017-7-6 21:23
public static void swap(int[] arr)
        {
                int temp=arr[0];
                arr[0]=arr[1];
                arr[1]=temp;
        }

作者: 飞常年华    时间: 2017-7-6 22:03
以下代码可直接复制粘贴到自己创建的类下边,运行测试:
        public static void main(String[] args) {
                int[] arr = { 1, 2, 3, 4, 5, 6 };
                swap(arr, 0, 5);//传进要交换的数组索引,即可交换对应索引的元素
                print(arr);
        }

        public static void swap(int[] arr, int a, int b) {
                int temp = arr[a];
                arr[a] = arr[b];
                arr[b] = temp;
        }

        public static void print(int[] arr) {
                System.out.print("[");//美化打印格式
                for (int x = 0; x < arr.length; x++) {
                        if (x == arr.length - 1) {
                                System.out.println(arr[x] + "]");
                                break;
                        }
                        System.out.print(arr[x] + ",");
                }
        }
作者: zlloyd    时间: 2017-7-7 23:31
QQ1002730074 发表于 2017-7-6 21:23
public static void swap(int[] arr)
        {
                int temp=arr[0];

public static void swap(int[] arr,int a,int b)
        {
                int temp=a;
                a=b;
                b=temp;
        }
我主要是不明白这里,因为我之前定义了一个整型数组,所以数组里面的数都是整数,
然后我用swap(arr,arr[0],arr[1]),也就是说,在这里a=arr[0];b=arr;可是结果就是这俩个数不调换,问题是出在这里   但是我感觉没错    难道是哪里没有搞清楚原理?
作者: zlloyd    时间: 2017-7-7 23:35
飞常年华 发表于 2017-7-6 22:03
以下代码可直接复制粘贴到自己创建的类下边,运行测试:
        public static void main(String[] args) {
                int ...

谢谢你的帮助,但我还没有搞懂为什么我那样不能置换,感觉逻辑上没错
作者: 亦丶风    时间: 2017-7-8 13:22
你传入方法中的是两个数
即a=1,b=2 然后你的方法是将ab的值互换了一下 但是你并没有对数组进行操作 这就好比说你有一副新的扑克牌 之后你又买了一副同样的扑克牌给了别人 那别人对扑克牌怎么洗牌也不可能改变你手中的扑克牌顺序

作者: myforaward    时间: 2017-7-8 13:41
本帖最后由 myforaward 于 2017-7-8 13:42 编辑

swap(int[] arr,int a,int b)
int型参数,是直接传值的。
在方法内部修改a b的值,不会修改原始变量的值。

数组是传引用的。 可以直接修改数组内容。
你先学习基本的方法定义和参数传递规则。
基本类型是传值, 对象是传引用。


作者: wangyupeng123    时间: 2017-7-8 13:43
因为数组是引用类型,而你写的方法是整数,虽然可以置换整数 但却置换不了数组的元素
作者: zlloyd    时间: 2017-7-9 23:31
wangyupeng123 发表于 2017-7-8 13:43
因为数组是引用类型,而你写的方法是整数,虽然可以置换整数 但却置换不了数组的元素 ...

原来是这样,我懂了,谢谢你
作者: zlloyd    时间: 2017-7-9 23:35
myforaward 发表于 2017-7-8 13:41
swap(int[] arr,int a,int b)
int型参数,是直接传值的。
在方法内部修改a b的值,不会修改原始变量的值 ...

谢谢你!是我基础不好,刚学没多久。貌似还要学好多东西呀   ,我是看视频学的
作者: zlloyd    时间: 2017-7-9 23:37
亦丶风 发表于 2017-7-8 13:22
你传入方法中的是两个数
即a=1,b=2 然后你的方法是将ab的值互换了一下 但是你并没有对数组进行操作 这就好 ...

谢谢你,我一下子好像懂了,我换的不是同一个东西     
作者: wangyupeng123    时间: 2017-7-10 20:59
zlloyd 发表于 2017-7-9 23:31
原来是这样,我懂了,谢谢你

不客气哟




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