您的位置:首页 > 职场人生

黑马程序员——关于两个int类型的数值交换

2014-03-04 03:18 274 查看
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

交换两个int类型的数值int s1,;

int s2;

①、首先在不封装成函数的情况下,有以下3种交换方法:

int temp;
temp=s1;
s1=s2;
s2=temp;


s1=s1+s2;
s2=s1-s2;
s1=s1-s2;
s1=s1^s2;
s2=s1^s2;
s1=s1^s2;


②、其次,在封装成函数时,常见的错误封装方式为

public static void swap(int a,int b){}

int a=3;

int b=5;

swap(int a,int b)

System.out.println("a="+a+"\t"+"b="+b);

由于byte,short,int,long,float,double,Boolean这些属于Java的基本数据类型,在作为参数传递过程中,他们只能传递数值。所以说即使在上述函数中完成了a ,b 的交换也仅仅是在函数内完成的交换,离开函数就被释放。在这种情况下,除非s1,s2是静态变量,否则无法交换。

③、为完成两个非静态int 类型数值的交换,我们可以从两方面出发:

1、定义有返回值的函数,例如:

public static int swap(int a,int b)

{

return b;

}

在主函数中利用稍作修改,可以实现交换,但是仍算不上方法封装。

2、新建一个包含两个数值的类,利用类对象进行传递,例如:

class Swap

{

int x, y;

public Swap(int x, int y)

{

this.x = x;

this.y = y;

}

}

class JavaDemo

{

public static void main(String[] args)

{

int x = 3;

int y = 4;

System.out.println("x: " + x + ", y: " + y);

Swap swap = new Swap(x, y);

x = swap.y;

y = swap.x;

System.out.println("x: " + x + ", y: " + y);

}

}

通过对象new Swaper(x, y),调用其内部成员变量完成赋值。

参考引用数据类型:类,接口,数组,当形式参数是这些引用数据类型时可以完成传递:

class Swaper

{

int a;

int b;

}

class SwapTest

{

public static void main(String[] args)

{

Swaper sw=new Swaper();

sw.a=3;

sw.b=5;

swap(sw);

}

public static void swap(Swaper sw)

{

int temp;

temp=sw.a;

sw.a=sw.b;

sw.b=temp;

}

}

这里利用引用类型中的类封装了两个int 类型数值,传递类对象完成交换。

ps:这里主要加深对数据类型:基本数据类型,传递值

引用数据类型,传递地址

两种类型在作为形式参数过程中,传递的值作用区间的深入理解。

----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: