您的位置:首页 > 职场人生

黑马程序员 自学13C#编程基础之返回值

2014-04-15 23:17 267 查看
-------
Windows Phone 7手机开发、.Net培训、期待与您交流! -------

返回值

2014/4/4

方法中被调用者想访问调用者的变量用传参的方法:

方法名();

{

Test(a);

……

}

Public static void Test (int a)

{

a=a+1;

……

}

方法中,调用者想访问被调用者中的变量时,可以用返回值返回。

为何方法前面能够定义一个变量接收方法的值?

eg:

string s=Console.ReadLine();

int i=Convert.ToInt32(“22”);

是因为在方法中使用了返回值。

只要在方法中返回了值,那么在调用方法中,前面就应该用一个变量来接收方法的返回值。

注意:一个方法只能有一个返回值(参数可以有多个,返回值只能有一个)。

要修改返回值类型:

eg:void→返回值类型”string”

public static string Test()

一旦方法有返回值,那么在这个方法体中就必须通过return语句返回一个值,并且这个值要与返回值类型是相同的。

语法:

return + 值;

调用者中:

{

string s=Test();

}

被调用者中:

public static string Test ()

{

return (string);

}

结果一半不在(被调用者)方法中写,因为方法只尽其责,不是为了出结果。

Return可以多次出现在程序中,配合if使用。

当形参是数组的时候,我们传数组名:

……Main()

{

Int[]aaa={…………};

Test(aaa)//→传一个数组的话,调用者这里参数写该数组的方法名。

}

……Sum(int[]number)//这里则定义一个数组来接收

{……}

当传输的是数组中的元素时:

……Main()

{

Int[]aaa={……};

Test(aaa[0],aaa[1]);

}

……Sum(int a,int b)

{……}

复习

2014/4/5

数组:

可以帮我们解决一组/N多个相同类型的变量。

冒泡排序:(最基本)

趟数 < ××.Length-1 i++

每趟每数比较次数 < ××.Length-1-躺数 n++

temp=n-1;

n-1 = n;

n =temp;

(静态)方法:

1. 用来复用代码,小功能块=方法;

2. 封装(Console.WriteLine(“”);→向控制台输出)

注意:

1. 方法一般要定义在类中;

2. 若方法没有返回值,则返回值类型写void;

3. 若方法没有参数,则()不能省略。

调用:类名 . 方法名() ;

Int . Test ();

在类中调用本类的方法,可以只写方法名:

Class Program

……

……Main()

{

ShowUI();//Program ShowUI();

Class1.MyTest();//这个是在其他类中的方法

}

……ShowUI()

{……}

Return

立即退出本方法

变量的作用域:

在方法内定义的变量为局部变量,从定义开始到定义的大括号结束为止。

调用者→被调用者之间是用参数传输(Test(a);Test(int a);)

被调用者→调用者之间可用返回值传输的 return

这些传输的值均一一对应。

若不传参,却要使用其他方法中变量的值:

一个变量一旦定义在方法外,类的里面,则叫做类的字段,这个变量就可以被本类的所有方法所访问。

注意:静态方法只能访问静态字段。

Static int a = 10 ; 可以让静态方法访问字段。

如下文有:public static boid Test(int a)

{

a = a+1;//这里的a则是传参的值(就近原则)

}

静态方法只能访问静态字段,非静态方法都能访问。

Static 不能声明常量,常量也不能声明static

方法不管是否静态,都可以访问常量。

由const修饰的常量不能定义为静态的。

Windows屏蔽了地址(用变量屏蔽)

Int i(接收返回值)=Convert.ToInt32(“22”)(参数);

三元表达式 max=a>b?(T):(F);

要养成对方法文档注释的好习惯。

思考:

既然Console.WriteLine()是方法,那么为什么WriteLine的参数可以是字符串类型也可以是数字类型,还可以是bool char……类型?

为什么要有方法的重载?

词汇小结:

Accept:接受

Change:转换

练习:

练习一:
#region 年份计算
Console.WriteLine("请输入要计算的年份:");
Console.Write("年份:");

bool answer = Count();//传给方法year,接收count方法对闰年的判断结果,是bool类型
if (answer == true)
Console.WriteLine("你输入的年份是闰年");
else
Console.WriteLine("你输入的年份不是闰年");
Console.ReadKey();
}
public static bool Count()
{
int year;
bool flag = false;
do
{//do-while 循环
try
{//try-catch用来判断用户是否输入int以外其他的字符串
year = int.Parse(Console.ReadLine());//int XX=int.Parse(string)
if (year < 0)//这个条件用来判断用户输入的年份是否有效
Console.WriteLine("请输入正确的年份");
else
break;
}
catch
{
Console.WriteLine("请输入正确的年份!");
}
}
while (true);
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
flag = true;
return flag;
#endregion


练习二:
#region 方法判断用户输入数字
Console.WriteLine("请输入一个整数");
Console.Write("整数:");
Judge();
Console.ReadKey();

}
public static void Judge(/*int number*/)
{
do
{
try
{
int number = int.Parse(Console.ReadLine());
break;
}
catch
{
Console.WriteLine("请输入正确的数字");
Console.Write("整数:");
}
}
while (true);


练习三:
#region 让用户只输入y/n
Console.WriteLine("请输入y/n");
Console.Write("y/n:");
Judge();
Console.ReadKey();
}
public static void Judge()
{
do
{
try
{//防止用户输入两个以上的字符串
char input = char.Parse(Console.ReadLine());
if (input == 'y' || input == 'n')//防止用户输入的不是y/n
break;
else
{
Console.WriteLine("请输入y/n");
Console.Write("y/n:");
}
}
catch
{
Console.WriteLine("请输入y/n");
Console.Write("y/n:");
}

}
while (true);
#endregion


练习四:
#region 输入两个数
Console.WriteLine("请输入两个整数");
int max = Max();
Console.WriteLine("刚刚输入的两个数中最大数为:" + max);
Console.ReadKey();
}
/// <summary>
/// 下面这个方法是用来输入两个数字比较最大值的,而且只能输入数字。
/// </summary>
/// <returns></returns>
public static int Max(/*int number*/)
{
int max;
do
{
try
{

Console.Write("整数1:");
int number1 = int.Parse(Console.ReadLine());
Console.Write("整数2:");
int number2 = int.Parse(Console.ReadLine());
max = number1 > number2 ? number1 : number2;//三元表达式

break;
}
catch
{
Console.WriteLine("请输入正确的数字");
}
}
while (true);
return max;
#endregion


练习五:
#region 数组的和
Console.WriteLine("请输入十个数计算它们的和");
int sum = Sum();//int[]aaa={1,2,3,}   int sum=Sum(aaa)
Console.WriteLine("和为:" + sum);
Console.ReadKey();
}
public static int Sum()//Sum(int[] number)
{
int sum = 0;
int[] number = new int[10];
for (int i = 0; i < number.Length; i++)
{
Console.Write("第{0}个数:", i + 1);
try//这个得写在for内部,不光是简便,写在外部如果某个数出错了,则全部需要重新输入。
{
number[i] = int.Parse(Console.ReadLine());
sum += number[i];
}
catch
{
Console.WriteLine("请输入正确的数字");
i--;//这个必须要有,(因为在for循环内,下一步就是i++)不然第二个数字出错进入这里之后下一步会显示第三个数字:
}
}
return sum;
#endregion


练习六:
#region 循环输入两个数
static void Main(string[] args)
{
Console.WriteLine("请输入两个整数,如果想要结束比较则输入over");
do
{
string max = Max();
if (max == "输入错误")
Console.Clear();
else if(max=="over")
{
Console.WriteLine("程序结束");
break;
}
else
Console.WriteLine("刚刚输入的两个数中最大数为:" + max);
}
while (true);

Console.ReadKey();
}
public static string Max(/*int number*/)
{
string max = "0";//之所以为string类型是为了用户输入其他字符之后可以让max是输入错误而不是数字从而产生bug。
int numberA,numberB;
string number1, number2;
try
{
Console.Write("整数1:");
number1 =Console.ReadLine();
Console.Write("整数2:");
number2 =Console.ReadLine();
if (number1 == "over" || number2 == "over")//只能输入两次后再结束,不然后面没办法判断。此程序弊端之一!
{
max="over";//如果不写这个,Max方法会报错“并非所有代码路径都返回值”
//break;这个break是不用再写的,因为一旦开始返回数值,就相当于break。
}
else
{
numberA = int.Parse(number1);//转换成int类型,如果这步出错则证明用户输入了其他字符。
numberB = int.Parse(number2);
int max1=int.Parse(max);
if (numberB < numberA)
max1 = numberA;
else
max1 = numberB;
max = Convert.ToString(max1);//换回string,因为要返回的是一个string的值。
return max;
}

}
catch
{
max="输入错误";
Console.WriteLine("请输入正确的数字");
Console.ReadKey();
}

return max;
#endregion


-------
Windows Phone 7手机开发、.Net培训、期待与您交流! -------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: