Java 方法的参数是简单类型的时候,是按值传递的 (pass by value),所以Java里面不能实现和C中一样的swap方法来交换两个数的值。非要用的话只能这样写:
//交换数组data中的第a和第b个元素
public static void swap(int[] data, int a, int b) {
int t = data[a];
data[a] = data[b];
data[b] = t;
} 估计不是你想要的效果。
关于Java中参数和引用的问题建议看看下面的博文:
/zw_2011/article/details/6431448
将两个数进行互换的方法有两种形式:
1、借助中间变量完成,此方法直观,易理解,使用最多
2、不需要中间变量,通过变量身的运算完成交换。
参考代码:
方法1:
int a=2,b=3,t;
t=a; //先将a存储到临时变量t中
a=b; //将b存储到a中
b=t; //将临时变量中的原a值存储到b中
printf("a=%d b=%d\n", a,b );
方法2:
int a=2,b=3,t;
a += b ; //把两数之和存到a中
b= a-b ; //用两数和减去b可得原a,存储到b中
a= a-b ; //因为b现在是原a值,所以,用两数和减去b(原a)可得 原b,存储到a中
此方法,还可以用异或运算来实现,原理相同。
编程中有时会需要交换两个变量的值,之前常用的方法就是利用一个临时变量作为中间值交换,并且一直受限于现实中两瓶油交换的思维,认为这是唯一的方法,但在编程中真的如此吗?假设:int a=1;int b=2;现在需要交换两个int变量的值 1.常用的方法,使用临时变量:int c = a;a = b;b = c;这是常用的也是最容易想到的方法。
2.运用位运算^:a^=b;b^=a;a^=b;或者a=a^b;b=a^b;a=a^b;我的理解:^即异或操作符,相同为0,不同为1,对于二进制有三种形式,即: m=0, n=0; 第一次计算m^n结果m=0,第二次计算n^=m结果为0,即是m原来的值。 m=0, n=1; 第一次计算m^n结果m=1,第二次计算n^=m结果为0,还是m原来的值。
m=1, n=1; 第一次计算m^n结果m=0,第二次计算n^=m结果为1,还是m原来的值。 变量名只是代号,不考虑顺序,只有三种形式。
由此得出结论位m与另一位n进行异或运算两次之后表达式(m^n)^n的值仍为原来的值,将这个值赋给另一个变量就实现交换。 由于计算机中数值表示形式为二进制,由一位推广至8、16、32位,结论不变,因此对于int值来说也实现了交换。
3.运用算术运算,容易理解,也挺巧妙:a=a+b;b=a-b;//b=(a+b)-b a=a-b;//a=a+b-((a+b)-b) 三种方案第二种最优,但不太好理解,第三种次之,最容易理解的属第一种方案,但空间及时间开销较大。附:异或值表输入运算符输入结果1^011^100^000^11。
#include
#include
#include
int fun1(int *a,int *b)
{
int temp;
if(*a>=*b)
{
temp=*a;
}
else
{
temp=*b;
}
return(temp);
}
int main(void)
{
int a=2;
int b=1;
printf("a=%d,b=%d\n",a,b);
fun2(&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
一、线路交换
所谓线路交换是通过网络中的节点在两个站之间建立一条专用的通讯线路。如图1的电话系统,这种线路交换系统,在两个站之间有一个实际的物理连接,这种连接是节点之间的连接序列。在传输任何数据之间都必须建立点到点的线路。如站1发送一个请求到节点2,请求与站点2建立一个连接,那么站点1到节点1是一条专用线路。在交换机上分配一个专用的通道连接到节点2再到站点2的通讯。至此就建立了一条从站点1经过节点2再到站点2的通讯物理通道。这样就可以将话音从站点1传送到站点2了,一般来说这种连接是全双工的,可以在两个方向传输话音(数据)。
二、报文交换
这种交换方式不需要在两个站点之间建立一条专用通路,如果一个站想要向站点2发送一个报文(信息的一个逻辑单位),它把站点2的地址(编码方式,叫做地址码)附加在要发送的报文上。然后把报文通过网络从节点到节点进行发送,在每个节点中(如要通过多个节点才能发送到站点2)完整地接收整个报文且暂存这个报文,然后再发送到下一个节点。在交换网中,每个节点是一个电子或机电结合的交换设备,每个节点通常是一台通用的小型计算机。它具有足够的存储容量来缓存进入的报文。一个报文在每个节点的延迟时间等于接收报文的所有位所需要的时间,加上等待时间和重传到下一节点所需要的排队延时时间。
报文交换有以下优点
1、线路效率较高,这是因为许多报文可以用分时方式共享一条节点到节点的通道。
2、不需要同时使用发送器和接收器来传输数据,网络可以在接收器可用之前暂时存储这个报文。
3、在线路交换网上,当通讯量变得很大时,就不能接受某些呼叫。而在报文交换上却仍然可以接收报文,只是传送延迟会增加。
4、报文交换系统可以把一个报文发送到多个目的地。
5、能够建立报文的优先权。
6、报文交换网可以进行速度和代码的转换,因为每个站都可以用它特有的数据传输率连接到其他点,所以两个不同传输率的站也可以连接,另外还可以转换传输数据的格式。
三、分组交换
分组交换方式兼有报文交换和线路交换的优点。其形式上非常像报文交换。主要差别在于分组交换网中要限制传输的数据单位长度,一般在报文交换系统中可传送的报文数据位数可做得很长,而在分组交换中,传送报文的最大长度是有限制的,如超出某一长度,报文必须要分割成较少的单位,然后依次发送,我们通常称这些较少的数据单位为分组。这就是报文交换与分组交换所不同之处。
void swap (int &x,int &y){int a; a=x;x=y;y=a;}#include void main(){ int x,y; scanf("%d %d",&x,&y); swap (x,y); printf("%d %d",x,y);}首先,swap函数在没有定义返回值类型时,编译器会默认返回int类型,所以加void无返回类型就正确。
其次,楼主的参数传递是值传递,不会交换两个数,参数可以使用引用传递,如我的改动,也可以以指针传递;希望对楼主有帮助;。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:2.760秒