.NETC#dotNET

第 2 章 C#语言基础应用

2018-08-27  本文已影响27人  张中华

实例1:判断年份是否是闰年

年份如果能被400整除就为闰年,或者指定年份可以整除4但不能整除100也为闰年。
实现过程:

判断方法:
 public class Methods
    {
        // if year can be divided by 400 
        // or can be divided by 4 and not by 100,
        // the year is leap year.
        public static bool IsLeapYear(string year)
        {
            int iYear;
            if (!int.TryParse(year, out iYear))
            {
                return false;
            }
            return (iYear % 400 == 0 || (iYear % 4 == 0 && iYear % 100 != 0)) ? true : false;
        }
    }
调用方法:
static void Main(string[] args)
        {
            string year = "2008";
            string yearTwo = "2009";
            Console.WriteLine("{0} is leap year: {1}", year, Methods.IsLeapYear(year));
            Console.WriteLine("{0} is leap year: {1}", yearTwo, Methods.IsLeapYear(yearTwo));

            Console.ReadLine();
        }
测试结果:

实例2 使用checked关键字处理“溢出”错误

默认,unchecked.
使用checked关键字可能对程序的性能会有一点点影响,可以在代码的关键位置合理地使用checked关键字检查溢出,使用一点点的性能换来更加健康的程序,这样还是很好的。
如果不使用checked关键字,数值出现溢出时将不会出现任何异常信息,这时将会出现一件可怕的事情,程序中的数据已经不准确了,但是我们却没发现。
使用:

// how to use checked
            Stopwatch stopWatch = new Stopwatch();
            stopWatch.Start();
            byte num = 0;
            for (int i = 0; i < 500; i++)
            {
                num++;
            }
            stopWatch.Stop();
            TimeSpan ts = stopWatch.Elapsed;
            Console.WriteLine("Not use checked, num: {0}, time: {1}", num, ts);

            Stopwatch stopWatchTwo = new Stopwatch();
            stopWatchTwo.Start();
            byte numTwo = 0;
            try
            {
                for (int i = 0; i < 500; i++)
                {
                    checked { num++; }
                }
            }
            catch { num = 0; }
            stopWatchTwo.Stop();
            TimeSpan tsTwo = stopWatchTwo.Elapsed;
            Console.WriteLine("Use checked, num: {0}, time: {1}", numTwo, tsTwo);

测试结果:


从测试结果来看的话,在没使用checked时,num做了500次加法,而由于溢出,狠明显,num由于类型的限制,它的值并没有一直往上加,而是停止在了244,用时也是非常小的。
当使用了checked,并没有做到500次的相加,然而时间却是万倍,可能是数据量较小的缘故,使用时间都不是很长,以至于差别较大。但是使用checked造成时间上的性能损失还是比较明显的。

实例3 使用is关键字检查对象是否与给定类型兼容,使用as关键字将对象转换为指定类型

as关键字与is关键字一样都不会抛出异常,使用as关键字对对象进行类型转换,如果转换成功将会返回转换后的对象,如果转换不成功则不会返回异常而是返回NULL。

实例3 递归算法

数列:1,1,2,3,5,8,13,21,34,55……
求第n位数的值。
这里新建一个winform project,输入位数,计算出该位数数值:



实现代码:

 private void button1_Click(object sender, EventArgs e)
        {
            int iNm;
            if (int.TryParse(this.textBox1.Text, out iNm))
            {
                this.textBox2.Text = Calculate(iNm).ToString();
            }
            else
            {
                MessageBox.Show("请检查文本输入格式", "提示");
            }
        }

        private int Calculate(int number)
        {
            if (number <= 0)
            {
                return 0;
            }
            else if (number > 0 && number <= 2)
            {
                return 1;
            }
            else
            {
                return Calculate(number - 1) + Calculate(number - 2);
            }
        }
上一篇下一篇

猜你喜欢

热点阅读