第 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);
}
}