方法plus out,ref,params 函数重载/递归 C#编程记录

在main函数调用Axx()方法,main函数为调用者,Axx()为被调者

如果被调用者想要调用者的数值

1)传递参数 参数有形参和实参的区别

2)使用静态字段模拟全局变量(C#没有全局变量 可以用静态字段来模拟

如果调用者想要返回被调用者的数值

1)返回数值

2)形参和实参都在内存中开辟空间

1.判断闰年

using System;
namespace homework
{
    class  data
    {
        public static void Main(String[] args)
        {
            bool b=IsRun(2001);
            Console.WriteLine(b);
            Console.ReadLine();
        }
        public static bool IsRun(int year)
            {
                bool b=(year%400==0)||(year%4==0&&year%100!=0);
                return b;
            }
    }
}

2.读取输入的整数,定义成方法

namespace homework
{
    class  data
    {
        public static void Main(String[] args)
        {
            //读取用户输入的数据
            //调用函数进行判断
            Console.WriteLine("请输入一个整数");
            string input=Console.ReadLine();
            int number=GetNumber(input);
            Console.WriteLine(number);
            Console.ReadLine();
        }
        public static int GetNumber(string s)
        {
            while(true)
            {
                try{
                int number=Convert.ToInt32(s);
                return number;
                }
                catch
                {
                    Console.WriteLine("请重新输入:");
                    s=Console.ReadLine();

                }
            }
        }
    }
}

3.只允许用户输入y或者n,改成方法

namespace homework
{
    class  data
    {
        public static void Main(String[] args)
        {
            //循环时候输入yes或者no,只要不是,就重新输入
            Console.WriteLine("请输入yes或者no");
            string input=Console.ReadLine();
            string str=IsYesOrNo(input);
            Console.WriteLine(str);
            Console.ReadLine();
        }
        //限定用户只能输入yes或者no,并且返回
        public static string IsYesOrNo(string input)
        {
            while(true)
            {
                if(input=="yes"||input=="no")
                {
                    return input;
                }else
                {
                    Console.WriteLine("只能输入yes或者no,请重新输入");
                    input=Console.ReadLine();
                }
            }
        }
    }
}

3.计算数组的和

namespace homework
{
    class  data
    {
        //求一个整数类型数组总和
        public static void Main(String[] args)
        {
            int[] nums={1,2,3,4,5,6,7,8,9};
            int sum=GetSum(nums);
            Console.WriteLine(sum);
            Console.ReadLine();
        }
        //计算一个整数类型数组总和
        public static int GetSum(int[] nums)
        {
            int sum=0;
            for(int i=0;i<nums.Length;i++)
            {
                sum+=nums[i];
            }
            return sum;
        }
    }
}

高级参数:
out

如果在一个方法中,返回多个相同类型的数值时候,可以考虑返回一个数组。

但是,如果返回多个不同类型的数值的时候,但会数组就不行,此时,可以采用out参数。

1.写一个方法,求一个数组中的最大值、最小值、总和、平均值

namespace homework
{
    class  data
    {
        public static void Main(String[] args)
        {
            int[] nums={1,2,3,4,5,6,7,8,9};
            //将要返回的4个数值,放到一个数组中返回
            int[] res=GetMaxMinSumAvg(nums);
            Console.WriteLine("最大数值是{0},最小数值是{1},总和是{2},平均数值是{3}",res[0],res[1],res[2],res[3]);
            Console.ReadLine();
        }
        public static int[] GetMaxMinSumAvg(int[] nums)
        {
            int[] res=new int[4];
            res[0]=nums[0];//最大值
            res[1]=nums[0];//最小值
            res[2]=0;//总和
            for(int i=0;i<nums.Length;i++)
            {
                //如果当前的数值比假定的大
                if(nums[i]>res[0])
                {
                    res[0]=nums[i];
                }
                if(nums[i]<res[1])
                {
                    res[1]=nums[i];
                }
                res[2]+=nums[i];
            }
            res[3]=res[2]/nums.Length;
            return res;
        }
    }
}
namespace homework
{
    class  data
    {
        public static void Main(String[] args)
        {
            //
            int[] nums={1,2,3,4,5,6,7,8,9};
            int max;
            int min;
            int sum;
            int avg;
            bool b;
            string s;
            double d;
            Test(nums,out max, out min,out sum,out avg,out b,out s,out d);
            Console.WriteLine(max);
            Console.WriteLine(min);
            Console.WriteLine(sum);
            Console.WriteLine(avg);
            Console.WriteLine(b);
            Console.WriteLine(s);
            Console.WriteLine(d);
            Console.ReadLine();

        }
        public static void Test(int[] nums,out int max,out int min,out int sum,out int avg,out bool b,out string s,out double d)
        {
            //out参数要求在方法内部必须为其赋值
            max=nums[0];
            min=nums[0];
            sum=0;
            for(int i=0;i<nums.Length;i++)
            {
                if(nums[i]>max)
                {
                    max=nums[i];
                }
                if(nums[i]<min)
                {
                    min=nums[i];
                }
                sum+=nums[i];
            }
            avg=sum/nums.Length;
            b=true;
            s="123";
            d=3.14;
        }
    }
}

2.分别提示用户输入用户名和密码,判断输入是否正确,返回给一个登录结果,并且还要单独返回给用户一个登录信息。

namespace homework
{
    class  data
    {
        public static void Main(String[] args)
        {
            Console.WriteLine("请输入用户名");
            string userName=Console.ReadLine();
            Console.WriteLine("请输入密码");
            string userPwd=Console.ReadLine();
            String msg;
            bool b=IsLogin(userName,userPwd,out msg);
            Console.WriteLine("登录结果是:{0}",b);
            Console.WriteLine("登录信息:{0}",msg);
            Console.ReadLine();
        }
        //分为几种情况
        //登录正确返回结果
        //登录错误 用户名密码错误 用户名错误
        public static bool IsLogin(string name,string pwd,out string msg)
        {
            if(name=="admin"&&pwd=="888")
            {
                msg="登录成功";
                return true;
            }
            else if(name=="admin")
            {
                msg="密码错误";
                return false;
            }
            else if(pwd=="888")
            {
                msg="用户名错误";
                return false;
            }
            else
            {
                msg="用户名错误";
                return false;
            }
        }
    }
}

3.将int.TryParse()函数进行转换

namespace homework
{
    class  data
    {
        public static void Main(String[] args)
        {
            int num;
            bool b=MyTryParse("123",out num);
            Console.WriteLine("转换结果为{0}",b);
            Console.WriteLine("转换为{0}",num);

        }
        public static bool MyTryParse(string s,out int result)
        {
            result=0;
        try{
            result=Convert.ToInt32(s);
            return true;
        }
        catch
        {
            return false;
        }
        }
    }
}

ref:

能够将一个变量带入方法中进行改变,改变完成后,再改变后的值带出方法。

1.使用方法来交换两个int类型的变量

namespace homework
{
    class  data
    {
        public static void Main(String[] args)
        {
            int n1=10;
            int n2=15;
          //直接交换两个变量
        //   int temp=n1;
        //   n1=n2;
        //   n2=temp;
        //使用ref函数进行交换
            Test(ref n1,ref n2);
            Console.WriteLine(n1);
            Console.WriteLine(n2);
            Console.ReadLine();
        }
        public static void Test(ref int n1,ref int n2)
        {
            int temp=n1;
            n1=n2;
            n2=temp;
        }
    }
}

params可变参数:

将实参列表中跟可变参数数组类型一致的元素都当做数组去处理。

参数数组必须是形参列表中的最后一个元素。

一个形参列表中只能有一个可变参数

1.输出某人的总成绩

namespace homework
{
    class  data
    {
        public static void Main(String[] args)
        {
            int[] s={100,100,99,98};
            Test("李四",s);
            Console.ReadLine();
        }
        public static void Test(string name,int[] score)
        {
            int sum=0;
            for(int i=0;i<score.Length;i++)
            {
                sum+=score[i];
            }
            Console.WriteLine("{0}的总成绩是{1}",name,sum);
        }
    }
}
namespace homework
{
    class  data
    {
        public static void Main(String[] args)
        {
            // int[] s={100,100,99,98};
            Test("李四",100,100,99,97);
            Console.ReadLine();
        }
        public static void Test(string name,params int[] score)
        {
            int sum=0;
            for(int i=0;i<score.Length;i++)
            {
                sum+=score[i];
            }
            Console.WriteLine("{0}的总成绩是{1}",name,sum);
        }
    }
}

2.求任意长度数组的最大数值,整数类型

namespace homework
{
    class  data
    {
        public static void Main(String[] args)
        {
            // int[] nums={1,2,3,4,5};
            int nums=GetSum(100,98,97,69);
            Console.WriteLine("总的成绩是{0}",nums);
            Console.ReadLine();
        }
        public static int GetSum(params int[] nums)
        {
                int sum=0;
                for(int i=0;i<nums.Length;i++)
                {
                    sum +=nums[i];
                }
                return sum;
        }
    }
}

方法重载:

方法的名称相同,但是参数不同。

参数不同的情况:

1)如果参数的个数相同,那么参数的类型就不能相同

2)如果参数的类型相同,那么参数的个数就不能相同

方法的重载跟返回数值没有关系,进行函数重载时候,如果一个定位有返回数值,一个定义为无返回数值,最终不能构成函数重载。

判断是否重载

方法名称,参数个数,类型是否相同,返回值(与是否有返回数值无关)

namespace homework
{
    class  data
    {
        public static void Main(String[] args)
        {
            double a=M(1.1,1.2);
            int b=M(1,2);
            string s=M("1","235");
            Console.WriteLine(a);
            Console.WriteLine(b);
            Console.WriteLine(s);
            Console.ReadLine();
        }
        public static double M(double n1,double n2)
        {
            return n1+n2;
        }
        public static int M(int n1,int n2)
        {
            return n1+n2;
        }
        public static string M(string n1,String n2)
        {
            return n1+n2;
        }
    }
}

方法递归:

方法自己调用自己

1.找出一个文件夹中所有的文件


 

namespace homework
{
    class  data
    {
        public static void Main(String[] args)
        {
            TellStory();
        }
        public static int i=0;
        public static void  TellStory()
        {
            
            Console.WriteLine("生活真美好呀");
            Console.WriteLine("冬天已经悄然来临");
            i++;
            if(i<10)
            {
                TellStory();
            }
           // if(i>=10)
        //    {
           //     return;
           // }
           // TellStory();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值