C#---第六课:方法调用的几种场景:参数的传递、静态变量、递归方法、假设法、冒泡排序


1.方法的调用几种情况


1).基本的使用


using System;

namespace first_space
{

    class CommonClass
    {
        public static void Main()
        {
            int n1 = 10;
            int n2 = 20;
            int max = GetMax(n1, n2);
            Console.WriteLine("最大值为:{0}", max);
            Console.ReadKey();
        }

        public static int GetMax(int n1, int n2)
        {
            return n1 > n2 ? n1 : n2;
        }

    }

}

// 20




2).被调用处获取调用处的变量:通过参数传递


namespace first_space
{

    class CommonClass
    {
        public static void Main()
        {
            int n1 = 10;
            Addnum(n1);
            Console.WriteLine("n的值为:{0}", n1);
            Console.ReadKey();
        }


		// 设置静态方法,此处没有任何返回值
        public static void Addnum(int n1)
        {
            n1 += 10;
        }

    }

}


//内部方法:20
//n的值为:10

如果调用的方法里面,没有返回值去接收修改的变量。即使传递一个变量给方法,最终这个变也仅仅是在方法里面变动了,在全局中这边变量其实没有变动。



3).被调用处获取调用处的变量:静态/全局变量


namespace first_space
{
    
    class CommonClass
    {
        public static int n = 10;			// 静态变量、也是一个全局变量
        public static void Main()
        {
            Addnum();
            Console.WriteLine("n的值为:{0}", n);
            Console.ReadKey();
        }

        public static void Addnum()
        {
            n += 10;					// 因n是全局变量,所以不用通过函数的参数,也能获取到这个变量的值
            Console.WriteLine("内部方法:{0}", n);
        }

    }

}


// 内部方法:20
// n的值为:20

因设置了全局变量n,在调用方法Addnum()的时候,没有传递参数,因这个方法本身就能获取到全局变量本身,故对这个全局变量本身做了修改!



4).函数传递的是变量的值,不是变量本身


namespace first_space
{
    
    class CommonClass
    {
        public static int n = 10;
        public static void Main()
        {
            Addnum(n);						// 此处传递了n,相当于是把n的值传递过去,并不是n元素本身
            Console.WriteLine("n的值为:{0}", n);
            Console.ReadKey();
        }

        public static void Addnum(int n)	//此处传递了全局变量n,代表n的值,不是n本身
        {
            n += 10;
            Console.WriteLine("内部方法:{0}", n);
        }

    }

}



//内部方法:20
//n的值为:10

Addnum(n),虽然代表获取到了全局变量的n,但传递给函数的时候,只是传递n的值,相当于n的一个副本。不能对n本身做修改。这个函数内部读取的也是这个副本,不是n本身。故最终在Main方法中的n还是原来的值



5).将数组传递到方法中



namespace first_space
{

    class CommonClass
    {
        public static int[] nums = { 1, 3, 5, 7, 9 };
        public static int sum = 0;
        
        static void Main()		// Main函数此处没填写任何参数也可以
        {
            GetSum(nums);		// 传递数组到方法中,直接写数组名即可
        }

        public static void GetSum(int[] array)		// 因形参是int类型的数组,需要写成int[] array
        {
            for (int i = 0; i < array.Length; i++)
            {
                sum += array[i];
            }
            Console.WriteLine("sum的值为:{0}", sum);
            Console.ReadKey();
        }
    }
}


1. Main函数中,string[] args 是用来处理命令行参数的。命令行参数,就是你运行这个程序的时候给它传的参数。它是可选项,不是必须的.


2. 数组作为形参的时候,需要定义类型,例如int[] array这种形式。如果作为实参,直接写数组名即可。



2.特殊方法:递归方法



int index = 0;
Digui(index);

static void Digui(int i)
{
    if (i >= 5)		// 递归需要明确停止的条件
    {
        return;		// return 后面可以为空,代表停止但没返回任何内容
    }
    else
    {
        Console.WriteLine("HelloWorld!!!");
        i += 1;
        Digui(i);
    }
}
Console.ReadKey(true);


// 结果:
HelloWorld!!!
HelloWorld!!!
HelloWorld!!!
HelloWorld!!!
HelloWorld!!!



3.数组中求最大值—假设法


int[] array = { 3, 1, 5, 2, 16, 10 };


int max = array[0];		// 假设数组中第一个元素是最大值

for (int i = 0; i < array.Length; i++)
{

    if (array[i] > max)		// 遍历的时候,只要有一个元素比假设的值大,都将更大的值赋值给这个max
    {
        max = array[i];
    }
}

Console.WriteLine(max);
Console.ReadKey();


// 16

假设法,只适合找到一个值,最大值或最小值。如果想排序或想找第二大的值,则不适用了。



4.数组的排序—冒泡排序

在这里插入图片描述


int[] array = { 3, 1, 5, 2, 16, 10 };


for (int i = 0; i < array.Length-1; i++)		// 外面循环控制的是第几趟循环,
{
    for (int j = 0; j < array.Length-1-i; j++)	// 里面循环,控制每一趟循环对比的次数,每次都从第一个元素开始对比
    {
        if (array[j] > array[j + 1])			// 里面循环的索引,代表具体对比的数据的大小
        {
            int temp = array[j];
            array[j] = array[j+1];
            array[j + 1] = temp;
        }
    }
}

for(int i = 0; i < array.Length; i++)
{
    Console.WriteLine(array[i]);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello-alien

您的鼓励,是我最大的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值