题目
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
编写一个程序,输入两个整数,分别存放在变量x和y当中,然后使用自己定义的函数swap来交换这两个变量的值。
输入格式:输入只有一行,包括两个整数。
输出格式:输出只有一行,也是两个整数,即交换以后的结果。
要求:主函数负责数据的输入与输出,但不能直接交换这两个变量的值,必须通过调用单独定义的函数swap来完成,而swap函数只负责交换变量的值,不能输出交换后的结果。
输入输出样例
样例输入
4 7
样例输出
7 4
分析
刚开始以为是个非常简单的题,就利用方法嘛,就两个参数嘛,就往方法里传嘛,就像这样嘛:
import java.util.Scanner; /** * @Author: Re * @Date: 2021/2/27 20:56 */ public class Main { private static void swap(int x,int y){ int i = x; x = y; y = i; } public static void main(String[] args) { int x,y; Scanner scanner = new Scanner(System.in); x = scanner.nextInt(); y = scanner.nextInt(); swap(x,y); System.out.println(x+" "+y); } }
然后就错了嘛。
这时候我想起C语言里有这样的题,就是形参的改变不会传递给实参,这个问题C语言中是利用指针来做的。
虽然Java没有指针,但咱有对象啊(除了容易丢,没多大缺点)。
于是就有了以下的解题思路。
解题代码
import java.util.Scanner; /** * @Author: Re * @Date: 2021/2/27 21:32 */ public class Main { private static class shuZi{ public int n; public int getN() { return n; } public void setN(int n) { this.n = n; } public shuZi(int n) { this.n = n; } public shuZi(){ } } public static void main(String[] args) { Scanner scanner=new Scanner(System.in); shuZi x = new shuZi(scanner.nextInt()); shuZi y = new shuZi(scanner.nextInt()); swap(x,y); System.out.println(x.getN()+" "+y.getN()); } private static void swap(shuZi x,shuZi y){ int t=x.getN(); x.setN(y.getN()); y.setN(t); } }