如下代码所示,我想交换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改写成功,期待中..............
编程问题求助!我写了一个交换两个字符的函数,但不起作用,何解?
答案:3 悬赏:40
解决时间 2021-11-16 07:07
- 提问者网友:王者刀枪不入
- 2021-11-15 13:42
最佳答案
- 二级知识专家网友:花一样艳美的陌生人
- 2021-11-15 14:43
晕啊,楼主问的是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);
}
}
这是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);
}
}
全部回答
- 1楼网友:星星坠落
- 2021-11-15 16:54
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#的引用传递"
- 2楼网友:花一样艳美的陌生人
- 2021-11-15 16:14
#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);
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯