一个很小的C#程序问题

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespa... using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{

class Program
{

static void Main(string[] args)
{
int x = 66;
int y = 99;
Swap(x,y);
Console.WriteLine("swap x/y is {0} , {1}", x, y);

Console.ReadLine();
}

static void Swap(int a ,int b)
{
int m, n, tmp;
m = a;
n = b;

Console.WriteLine("In swap methord (before) m is : ", m);
Console.WriteLine("In swap methord (before) n is : ", n);

// int temp = a;
// a = b;
// b = temp;

tmp = m;
m = n;
n = tmp;

Console.WriteLine("In swap methord (after) m is : ", m);
Console.WriteLine("In swap methord (after) n is : ", n);

}

}
}

这程序的结果 是
In swap methord (before) m is :
In swap methord (before) n is :
In swap methord (after) m is
In swap methord (after) n is
swap x/y is 66 99

请问下这是为什么 Swap静态方法是调用了
但是参数没有传进去?
本来我直接用了形参
// int temp = a;
// a = b;
// b = temp;

但是不行,后来方法里又弄了2个参数 还是不行
请问这是为什么?
展开
 我来答
冥盅米粒bl
2013-08-22 · TA获得超过569个赞
知道小有建树答主
回答量:559
采纳率:100%
帮助的人:201万
展开全部

你的错误在于

没搞清楚int类型是值类型,并非引用类型,

所以int,Swap方法中的a,b;接收的是外部x,y的值

并非是地址,你在方法中交换的只是a,b,但x,y并没有交换

 

所以要在定义的Swap方法中参数前 加 ref ,reference的缩写 ,即引用

代码如下

 static void Main(string[] args)
        {
            int x = 66;
            int y = 99;

            Swap(ref x, ref y);
            Console.WriteLine("swap x/y is {0} , {1}", x, y);

            Console.ReadLine();
        }

        static void Swap(ref int a, ref int b)
        {
            int tmp;
            tmp = a;
            a = b;
            b = tmp;
        }

townsin
2013-08-22 · TA获得超过452个赞
知道小有建树答主
回答量:594
采纳率:50%
帮助的人:508万
展开全部

不是参数没有传进去,而是没有真的交换,你传进去的是值是交换了,但是那只是主方法变量x,y的副本,不是x,y本身。修改方法是将方法的参数改成引用

static void Swap(int & a ,int  & b)

另外,如【抽插小旋风|六级】所说,你的Swap里面的WriteLine用的也不对,正确代码如下:

static void Swap(int & a ,int & b)
{
    int tmp;
    Console.WriteLine("In swap methord (before) a is :{0}", a);
    Console.WriteLine("In swap methord (before) b is :{0}", b);
    tmp = a;
    a = b;
    b = tmp;
    Console.WriteLine("In swap methord (before) a is :{0}", a);
    Console.WriteLine("In swap methord (before) b is :{0}", b);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9faa50fc66
2013-08-22 · TA获得超过266个赞
知道小有建树答主
回答量:439
采纳率:0%
帮助的人:394万
展开全部
Console.WriteLine("In swap methord (before) m is : ", m); 把类似这样的输出语句换成

Console.WriteLine("In swap methord (before) m is : {0}", m);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
郯斌Jq
2013-08-22
知道答主
回答量:77
采纳率:0%
帮助的人:19.1万
展开全部
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{

    class Program
    {

        static void Main(string[] args)
        {
            int x = 66;
            int y = 99;
            Swap(x, y);
            Console.WriteLine("swap x/y is {0} , {1}", x, y);

            Console.ReadLine();
        }

        static void Swap(int a, int b)
        {
            int m, n, tmp;
            m = a;
            n = b;

            Console.WriteLine("In swap methord (before) m is {0}: ", m);
            Console.WriteLine("In swap methord (before) n is {0}: ", n);

            // int temp = a;
            //   a = b;
            //   b = temp;

            tmp = m;
            m = n;
            n = tmp;

            Console.WriteLine("In swap methord (after) m is:  {0}", m);
            Console.WriteLine("In swap methord (after) n is :{0} ", n);

        }

    }
}
变量的生命周期问题,在Swap(int a, int b)方法生命周期内tmp变量是可用的,到了主函数内tmp对主函数是不可用的,又怎么会改变a,b的值嘞?希望你多看看变量的生命周期
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mutong0803
2013-08-22
知道答主
回答量:5
采纳率:0%
帮助的人:3万
展开全部
static void Swap(int a ,int b) 的方法里 输出语句没有写占位符
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式