A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

zlloyd

中级黑马

  • 黑马币:122

  • 帖子:103

  • 精华:0

本帖最后由 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;可是结果就是这俩个数不调换,问题是出在这里   但是我感觉没错    是不是哪里没有搞清楚原理?

评分

参与人数 1黑马币 +1 收起 理由
yushulinfeng + 1 这个问题很简单,你写的方法只是在交换基本.

查看全部评分

11 个回复

倒序浏览
public static void swap(int[] arr)
        {
                int temp=arr[0];
                arr[0]=arr[1];
                arr[1]=temp;
        }
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
以下代码可直接复制粘贴到自己创建的类下边,运行测试:
        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] + ",");
                }
        }
回复 使用道具 举报
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;可是结果就是这俩个数不调换,问题是出在这里   但是我感觉没错    难道是哪里没有搞清楚原理?
回复 使用道具 举报
飞常年华 发表于 2017-7-6 22:03
以下代码可直接复制粘贴到自己创建的类下边,运行测试:
        public static void main(String[] args) {
                int ...

谢谢你的帮助,但我还没有搞懂为什么我那样不能置换,感觉逻辑上没错
回复 使用道具 举报
你传入方法中的是两个数
即a=1,b=2 然后你的方法是将ab的值互换了一下 但是你并没有对数组进行操作 这就好比说你有一副新的扑克牌 之后你又买了一副同样的扑克牌给了别人 那别人对扑克牌怎么洗牌也不可能改变你手中的扑克牌顺序
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报 1 0
本帖最后由 myforaward 于 2017-7-8 13:42 编辑

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

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

回复 使用道具 举报 1 0
因为数组是引用类型,而你写的方法是整数,虽然可以置换整数 但却置换不了数组的元素
回复 使用道具 举报 1 0
wangyupeng123 发表于 2017-7-8 13:43
因为数组是引用类型,而你写的方法是整数,虽然可以置换整数 但却置换不了数组的元素 ...

原来是这样,我懂了,谢谢你
回复 使用道具 举报
myforaward 发表于 2017-7-8 13:41
swap(int[] arr,int a,int b)
int型参数,是直接传值的。
在方法内部修改a b的值,不会修改原始变量的值 ...

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

谢谢你,我一下子好像懂了,我换的不是同一个东西     
回复 使用道具 举报
zlloyd 发表于 2017-7-9 23:31
原来是这样,我懂了,谢谢你

不客气哟
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马