目录
– 复习
– 方法的调用问题
– 练习1
– 方法的概念
– 练习2
– 两个练习
复习
- 常量: 赋予初始值后, 不可以重新赋值
const int number = 10;
- 枚举: 可以和
int
兼容, 和string
转换很复杂
public enum Gender
{
男,
女
}
string s = "男";
Gender g = (Gender)Enum.Parase(typeof(Gender), s);
- 结构: 字段可以存储多个值, 命名的时候记得带上下划线\”_\”
public struct Person
{
public string _name;
public age _age;
public Gender _gender;
}
Person zsPerson;
zsPerson._name = "张三";
zsPerson._age = 20;
zsPerson._gender = Gender.男
- 数组: 一次性存储多个相同类型的变量
数组的长度一旦声明不可改变
int[] numbers = new int[10];
- 数组操作: 冒泡排序
面试时体现领悟力使用
int[] numbers = { 123, 8, 445, 26, 45, 65, 46 };
for (int i = 0; i < numbers.Length - 1; i++)
{
for (int j = 0; j < numbers.Length - i - 1; j++)
{
if (numbers[j] > numbers[j + 1])
{
int temp = numbers[j + 1];
numbers[j + 1] = numbers[j];
numbers[j] = temp;
}
}
}
for (int i = 0; i < numbers.Length - 1; i++)
{
Console.Write(numbers[i] + "<");
}
Console.Write(numbers[numbers.Length - 1]);
Console.ReadKey();
平日里为了效率使用
int[] numbers = { 123, 8, 445, 26, 45, 65, 46 };
Array.Sort(numbers);
for (int i = 0; i < numbers.Length - 1; i++)
{
Console.Write(numbers[i] + "<");
}
Console.Write(numbers[numbers.Length - 1]);
Array.Reverse(numbers);
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
Console.ReadKey();
方法的调用问题
- 例子
static void Main(string[] args) //Main函数
{ //代码从这里走起
int a = 3;
Test();
Console.WriteLine(a);
}
public static void Test()
{
a += 5;
}
这个例子的运行结果是报错, 因为参数a在test中未命名
– 如果被调用者要获得调用者的值, 方法有二
+ 传参
+ 使用静态字段来模拟全局变量
public static void int _number = 10;
- 注意: C#中没有全局变量这一说
- 如果调用者要获得被调用者的值
- 用return
练习1
- 写一个方法, 判断是否是闰年
static void Main(string[] args) //Main函数
{ //代码从这里走起
bool b = IsRun(2022);
Console.WriteLine(b);
}
/// <summary>
/// 判断给定的年份是否是闰年
/// </summary>
/// <param name="year">给定的年份</param>
/// <returns>是否是闰年</returns>
public static bool IsRun(int year)
{
bool b = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
return b;
}
- 注意\: \”并非所有的代码路径都返回值\” 的语法错误对应的情况是: 声明了返回值的类型但没有返回任何值
方法的概念
- 实参: 在传参时, 实实在在存在的参数
- 形参: 在方法中使用的形式上的参数, 作用域只在其方法内部
- 两者关系: 作用域不同, 没有必然的练习, 只有数据类型要求一致, 且两者都在内存中开辟空间
练习2
- 读取输入的整数, 如果输入是数字, 则返回, 否则提示用户重新输入
while (true)
{
Console.WriteLine("请输入数字");
try
{
int number = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(number);
break;
}
catch
{
Console.WriteLine("输入有误");
}
}
Console.ReadKey();
- 典型错误
Main(){
NewMethod();
Console.ReadKey();
}
原则: 方法的功能一定要单一
忌讳: 方法中出现提示用户输入的字眼否则, 这就限定了这个方法只能在控制台程序中使用
而其他程序开发将不兼容
团队合作中也很讨厌
- 正确事例
static void Main(string[] args) //Main函数
{ //代码从这里走起
Console.WriteLine("请输入一个整数");
Console.WriteLine(GetNumber(Console.ReadLine()));
Console.ReadKey();
}
/// <summary>
/// 判断用户的输入是否是数字
/// 是数字就返回
/// 不是, 就提示用户重新输入
/// </summary>
public static int GetNumber(string s)
{
while (true)
{
try
{
int number = Convert.ToInt32(s);
return number;
}
catch
{
Console.WriteLine("请重新输入");
s = Console.ReadLine();
}
}
}
两个练习
- 只允许输入y和n, 用方法实现
static void Main(string[] args) //Main函数
{ //代码从这里走起
// 方法的效果, 只输入y或n, 只要不是, 重新输入
Console.WriteLine("请输入y或者n");
Console.WriteLine(IsYesOrNo(Console.ReadLine()));
Console.ReadKey();
}
/// <summary>
/// 限定用户只能输入yes或者no
/// </summary>
/// <param name="input">用户的输入</param>
/// <returns>"y"或者"n"</returns>
public static string IsYesOrNo(string input)
{
while (true)
{
if (input == "y" || input == "n")
{
return input;
}
else
{
Console.WriteLine("只能输入y或者n, 请重新输入");
input = Console.ReadLine();
}
}
}
- 计算输入数组的总和
static void Main(string[] args) //Main函数
{ //代码从这里走起
int[] numbers = { 1, 2, 3, 4, 5, 6 };
Console.WriteLine(GetSum(numbers));
}
/// <summary>
/// 输入整数数组, 返回其总和
/// </summary>
/// <param name="numbers">数组</param>
/// <returns>总和</returns>
public static int GetSum(int[] numbers)
{
int sum = 0;
for (int i = 0; i < numbers.Length; i++)
{
sum += numbers[i];
}
return sum;
}