发布网友 发布时间:2022-04-25 15:38
共5个回答
热心网友 时间:2023-09-09 10:47
利用异或(a^b)^b 等于a,进行交互,不需要设置临时变量也不会超范围。代码如下:
import java.util.Scanner;
public class woo {
public static void main(String args[]) {
Scanner scan =new Scanner(System.in);
System.out.println("输入两个数a, b");
int a = scan.nextByte();
int b = scan.nextByte();
System.out.printf("交换前:a = %d, b = %d\n", a, b);
a = a^b;
b = a^b;
a = a^b;
System.out.printf("交换后:a = %d, b = %d", a, b);
}
}
扩展资料:
值传递就是在方法调用的时候,实参是将自己的一份拷贝赋给形参,在方法内,对该参数值的修改不影响原来实参。
引用传递是在方法调用的时候,实参将自己的地址传递给形参,此时方法内对该参数值的改变,就是对该实参的实际操作。
在java中只有一种传递方式,那就是值传递.可能比较让人迷惑的就是java中的对象传递时,对形参的改变依然会意向到该对象的内容。
参考资料:
百度百科——参数传递
热心网友 时间:2023-09-09 10:48
swap( int x, int y)实现对x和y值的交换 , 但从函数定义情况看,只是对形参进行了数据修改,不会影响到实参数据。因此,你的结果不会变化 , 仍然是a[0]= 1 a[1]= 2
正确方法:
int a=1,b=0;
System.out.println("a=" + a + ";b=" + b);
int tmp;
tmp=a;
a=b;
b=tmp;
System.out.println("a=" + a + ";b=" + b);
扩展资料:
对于下述程序,试分析用传值、传地址、传数组方法传递参数时所得的打印结果。
PROGRAM SS(input,output);
VAR
A,B:integer;
PROCEDURE P(x,y,z:integer);
begin y:=y+1;z:=z+x;
end;
BEGIN
A:=2;b:=3;
P(A+B,A,A);
writeln (‘A=‘,A);
END
解答
(1)传值:把实参的值计算出来传给形参。
在调用过程P时,形参x=5;y=2;z=2
出过程P时,形参x=5;y=3;z=7
这并不把结果回送到主程序,所以结果为A=2
(2)传地址:实参计算出结果,把地址送形参。
设变量T=A+B(结果为5)。执行时把T、A、A的
地址(设为addr1,addr2,addr2)送给形参:
x=daar1,y=addr2,z=addr2。
T的地址addr1即x→T(5)
A的地址addr2即y→A(2)
A的地址addr2即z→A(2)
执行过程P即为:①y↑:=y↑+1;②z↑:=z↑+x↑
所以,①为A:=A+1=3
②为A:=A+T=8。 因此,最后A=8.
(3)传数组:相当于执行 A:=2;B:=3; A:=A+1;A:=A+(A+B)
writeln(‘A=‘,A);
所以,结果为A=9。
参考资料:百度百科-参数传递
参考资料:百度百科- Java(计算机编程语言)
热心网友 时间:2023-09-09 10:48
因为java传递的是两个简单类型(int型),所以是传值,也就是把值给了num1和num2,以后无论num1和num2怎么变怎么换,跟a[0]和a[1]都无任何关系了,a[0]a[1]不会有任何变化。热心网友 时间:2023-09-09 10:49
因为你的参数是INT 类型 所以传参的时候传的是值。不会影响a。热心网友 时间:2023-09-09 10:49
int a=1,b=0;