学习资料来源:bilibili
[if]
应该都会吧哈哈哈
[for]
for(初始化;条件;末尾)
[Switch]
Console.WriteLine("请输入你的性别");
string Str1 = Console.ReadLine();
string title = "";
switch (Str1)
{
case "男": title = "帅哥"; break;
case "女": title = "美女"; break;
default: title = "朋友"; break;
}
Console.WriteLine($"你好,{title}");
[Enum]
Enum枚举,用于代替常量(魔数),增加代码可读性
枚举类型 - C# 参考 | Microsoft Learn
public void testEnum()
{
Console.WriteLine("输入一个数字");
//获取该数字
int num = int.Parse(Console.ReadLine());
//将数字转化为enum类型并存到gender中,Enum.Parse(Type, String)
SexType gender = (SexType)Enum.Parse(typeof(SexType),num.ToString());
//switch判断
switch (gender)
{
case SexType.Male: Console.WriteLine("男");break;
case SexType.Female: Console.WriteLine("女"); break;
case SexType.Other: Console.WriteLine("其他"); break;
default:Console.WriteLine($"无法识别: {gender}");break;
}
}
[While]
while(condition){code},当condition为True时,会一直执行{code}
[Continue]
continue会停止当前代码块的执行,让循环进入下一个环节
int i = 0;
while(i < 4){
i++;
//当i == 2时跳过
if(i == 2){
continue;
}
Console.WriteLine(i);
}
[Break]
终止循环,进入下一条语句
[DoWhile]
do{code} while(condition);
int i = 0;
do{
Console.WriteLine($"i={i}");
}while(i < 3)
[Ref关键字]
ref可以让变量存储在内存中的值被改变
public void testRefAndOut()
{
int i = 2, j,k = 2;
Console.WriteLine($"i:{i}");//2
Console.WriteLine("j未分配值");
Console.WriteLine($"k:{k}");//2
ChangeNumberRef(ref i);
ChangeNumberOut(out j);
ChangeNumber(k);
//改变了i在内存中的值,所以为3
Console.WriteLine($"i:{i}");
//out直接在函数内部初始化,不需要另外初始化
Console.WriteLine($"j:{j}");
//不改变k在内存中的值,所以为2
Console.WriteLine($"k:{k}");
}
public void ChangeNumberRef(ref int i)
{
i = 3;
}
public int ChangeNumberOut(out int j)
{
j = 4;
int b = 4;
return b;
}
public void ChangeNumber(int k)
{
k = 5;
}
完善计算器
public void testCalculator()
{
//反复执行
while (true)
{
Console.WriteLine("请输入算术题,按回车键结束(+,-,*,/,%)");
//读取控制台输入的
string inputStr = Console.ReadLine();
Console.WriteLine($"{inputStr}");
int calcType = -1;
//int index = ParseTypeAndIndex(inputStr, ref calcType);
int index = ParseTypeAndIndexByAry(inputStr, ref calcType);
if (calcType == -1)
{
Console.WriteLine("请输入+,-,*,/,%运算符!");
break;
}
CalcResult(inputStr, calcType, index);
}
Console.ReadLine();
}
private static void CalcResult(string str,int calcType,int index)
{
//获取字符串的长度
int length = str.Length;
//Substring(a,b)表示截取从下标a开始到一共index位的字符,不包括index
string numStr1 = str.Substring(0, index);
string numStr2 = str.Substring(index + 1, length - index - 1);
//强制转换为float类型
float num1 = float.Parse(numStr1);
float num2 = float.Parse(numStr2);
//用来保存结果
float result = 0;
//区分算法
switch (calcType)
{
//匹配id
case 0: result = num1 + num2; break;
case 1: result = num1 - num2; break;
case 2: result = num1 * num2; break;
case 3: result = num1 / num2; break;
case 4: result = num1 % num2; break;
default: break;
}
Console.WriteLine($"{str}的结果为{result}");
}
//将可以使用的符号存入数组
static string[] ary = new string[] { "+", "-", "*", "/" ,"%"};
//用for 遍历匹配
private static int ParseTypeAndIndexByAry(string str, ref int calcType)
{
//存放匹配到符号的位置,初始值为-1
int index = -1;
//遍历运算符数组
for(int i = 0; i< ary.Length; i++)
{
//取出符号
string tag = ary[i];
//用符号匹配字符串中对应符号位置
index = str.IndexOf(tag);
if (index != -1)
{
//分配id
calcType = i;
break;
}
}
return index;
}
//用if else 逐个匹配
private static int ParseTypeAndIndex(string str, ref int calcType)
{
//给符号一个id,并存储符号位置
int index = str.IndexOf("+");
if (index != -1)
{
calcType = 0;
}else {
index = str.IndexOf("-");
if (index != -1)
{
calcType = 1;
}else
{
index = str.IndexOf("*");
if (index != -1)
{
calcType = 2;
}else
{
index = str.IndexOf("/");
if (index != -1)
{
calcType = 3;
}
}
}
}
return index;
}