中易网

编程问题求助!我写了一个交换两个字符的函数,但不起作用,何解?

答案:3  悬赏:40  
解决时间 2021-11-16 07:07
如下代码所示,我想交换a和b的值,但输出结果可以看出来swap方法没有起作用,请各位朋友帮忙看看:
public class Test {
public static void swap(char a,char b){
char temp = a;
a = b;
b = temp;
}
public static void main(String args[]){
char temp1 = 'a';
char temp2 = 'b';
System.out.println(temp1 +" "+ temp2);//交换前两个变量的值
swap(temp1,temp2);
System.out.println(temp1 +" "+ temp2);
}
}

那么怎么解决呢??这个是Java的问题,一楼将 swap方法改写了,但是出现语法错误;二楼说用Holder类解决,但Holder类是jdk6才有的。难道没有其他方法了么,请路过的朋友将代码改写。还有,如果用c++的话,又要怎么办呢??

3楼正解,c++可以这样做,但Java没有指针应该怎么办呢?总会有办法的吧!不知道哪位朋友可以用Java改写成功,期待中..............
最佳答案
晕啊,楼主问的是JAVA, 不是C#..

这是JAVA与C++ ,C#一个关键区别,JAVA参数不能象C 或C#那样传引用或指针.

JAVA通常是使用Holder类来解决返回参数问题.
----------------------------------
我说的Holder,不是特指JDK1.6之后的支持,而是一种思想,
就是用一个类去当容器,包含需要返回的变量,只要满足这种思想的类都可以称为广义上的holder。
--------------------------------------------------
既然用JAVA,就要用JAVA的思想,把C++与C#的传引用丢开, 你不是处理一个个单独的变量,你是在处理对象,都是对象!! 被你交换的两个变量,就看作在一个对象里, 没有孤立的变量,这才是JAVA的思想.
相信经过这个问题,你该多少理解JAVA为何不设计变量的引用传递.

class MySwapParam
{
public char a;
public char b;
};

public class Test {
public static void swap(MySwapParam param){
char temp = param.a;
param.a = param.b;
param.b = temp;
}

public static void main(String args[]){
MySwapParam tmp = new MySwapParam();
tmp.a = 'a';
tmp.b = 'b';
System.out.println(tmp.a +" "+ tmp.b);//交换前两个变量的值
swap(tmp);
System.out.println(tmp.a +" "+ tmp.b);
}
}
全部回答
public class Test { public static void swap(ref char a, ref char b){ char temp = a; a = b; b = temp; } public static void main(String args[]){ char temp1 = 'a'; char temp2 = 'b'; System.out.println(temp1 +" "+ temp2);//交换前两个变量的值 swap(temp1,temp2); System.out.println(temp1 +" "+ temp2); } } 至于为什么,百度一下"C#的引用传递"
#include #include #include int fun(char *a,char *b); main() { file *fp; char a[30],b[30]; printf("请输入两个字符串:"); scanf("%s %s",a,b); fun(a,b); printf("%s %s\n",a,b); if((fp=fopen("d:\\myout.txt","r+"))==null) { printf("文件打开错误"); return; } fprintf(fp,"%s %s",a,b); } int fun(char *a,char *b) { char temp[50]; strcpy(temp,a); strcpy(a,b); strcpy(b,temp); }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
西宁市城北区环保局办公地址在什么地方,我要
酷吧客,冰淇淋
请问永嘉县乌牛镇到乐清市虹桥镇怎么走
互不相容是什么意思啊?
圮闕的意思是什么?圮闕的释义是什么啊?
你好我是一名高三学生今年17岁想问你有关申请
我是开封的,问一下个性化宾馆装修设计哪家好
拉直过的头发很容易断,没什么弹性,要怎样保养
黄石烫头发哪里好
互助土族自治县环境保护局地址在什么地方,想
我公司准备与对方签署仓库租赁合同,需要对方
我的邮件到通辽市报刊投递已经签收了,但我还
自学大数据难不难,就业前景怎样?
菜籽油仔细算下来并不赚钱 那开个小榨油坊怎
机动车私自减座位怎么样处罚
推荐资讯
鄢陵县南坞派出所地址有知道的么?有点事想过
想知道:成都市 都江堰美安居装饰建材市场 在
双色球开奖结果2016031是那些地方
台式机配件组装笔记本
我和男朋友感情出问题了我改怎么办?
天猫同健tg168ss好视力led护眼台灯多少钱
昨天用全部配额申购了新股,今天还能申购其他
LOL有些人为什么会有框框在旁边?
平邑出租车有多少
大专毕业可以参加村官考试么?
我的S7发烫三星的手机
我是家庭主妇如何在家轻松减肥
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?