VS注释:CTRL+K CTRL+C;(不知道设计者怎么想的,笨死了)
VS取消注释:CTRL+K CTRL+U;(笨死)
VS代码整理:CTRL+A CTRL+K CTRL+F;(笨死)
PS:最终无法忍受换了VS code😂😂😂😂😂
1. if语句
if (条件1)
{
执行1;
}
else if(条件2)
{
执行2;
}else
{
其他执行;
}
如果执行语句只有一句,还可以简写:
if(条件1) 执行1(仅一句);
else if(条件2)执行2(仅一句);
else (条件3)其他执行;
2. switch语句
switch (op) {
case "+":
op = "a+b";
break;
case "-":
op = "a-b";
break;
case "*":
case "×":
op = "a*b";
break;
default:
op = "";
break;
}
switch变量可以是整形’字符串‘布尔’char‘枚举或可以为null的类型,不能是其他的
case 只能判断定值;
每个case 必须break,包括default;
多个case执行相同语句可以缩写;
3.while语句
while (true) {
break;//continue;return;break加等跳转语句;
};
4.for循环
for (int i = 0; i < 10; i++) {
执行语句;
}
4.1 foreach遍历函数
foreach (int i in arr){
}
4.2 string的一些方法
string str = "我叫安妮";
Console.WriteLine(str.IndexOf("安"));
str.StartsWith("我");//判断开头字符,返回布尔;
string[] arr;
arr = str.Split("叫");//以某个字符切割字符串返回字符串组;
str = str.Insert(2, "小");//在第2个之前插入字符;
Console.WriteLine(str);
str = str.Replace("小", "大");//用新字符替换旧字符;
Console.WriteLine(str);
str = str.Remove(2, 1);//从第二个开始移除一个
Console.WriteLine(str);
str = str.Remove(2);//从第2个开始移除以后的
Console.WriteLine(str);
5. 方法(函数)结构
私有 静态 返回值 方法名(形参){
逻辑语句;
return 返回值;//如果是void的返回,只能写return(可不写),不能return任何东西;
}
private static int getWeekByDay(int year, int month, int day)
{
DateTime dt = new DateTime(year, month, day);
return (int)dt.DayOfWeek;
}
6. 方法(函数)的重载
方法名相同,返回值相同,但参数不同的方法们会被视为不同的方法,调用时传入不同的参数就可以实现方法的重载
例子:
private static long CountSec(int min) {
return min * 60;
}
private static long CountSec(int hour,int min)
{
return hour*CountSec(60)+min * 60;
}
private static long CountSec(int day,int hour, int min)
{
return day* CountSec(24,0) + hour * CountSec(60) + min * 60;
}
7.递归
递归优点:逻辑简单化
递归缺点:谨防堆栈溢出,性能差
例:递归算阶乘 :5*4*3*2*1
s3*2*1tatic void Main(string[] args)
{
Console.WriteLine (DiGui(5));
}
private static int DiGui(int num) {
if (num == 1) return 1;
return num * DiGui(num - 1);
}
8.数组
数组必须是同一种数据类型
数组的写法:
①声明、初始化、赋值
int[] a;//声明数组
a = new int[3];//初始化数组
a[2] = 2;//数组赋值
②初始化加赋值
int[] arr = new int[5] { 1,2,3,4,5};
③ 声明+初始化+赋值
int[] arr = { 1,2,3,4,5};
④匿名数组
GetMax(new int[] {12,53,64,77,88 })
9. var 推断类型
根据所赋值数据推断出类型
10. 声明父类类型 赋值子类对象
例:声明父类,传参传任意子类都可以。
private static void fun1(Array arr) {
执行语句;
}
11.随机数
static Random random = new Random();//此句写在方法外,类里面。
random.Next(1, 34);//含头不含尾;
12.数组方法
①获取数组长度
数组名.Length
②清除元素
注意!!!清除不是删除,清除只是将值清除为默认值!!!!
Array.Clear(数组, 起始位置, 清除长度);
例:Array.Clear(arr, 2, 4);
③数组复制元素
(1)Array.Copy(源数组,源数组开始index,目标数组,目标数组开始index,复制长度);
int[] arr = { 1, 4, 2, 6, 7, 9 };
int[] arr2 = { 0, 0, 0, 0, 0, 0 };
Array.Copy(arr,2,arr2,2,3);
(2)Array.Copy(源数组,目标数组,,复制长度);//从第一个开始赋复制
④数组复制
源数组.CopyTo(目标数组,目标数组开始index);
arr.CopyTo(arr2,0);
⑤数组克隆
arr2=(int[])arr.Clone();//因为Clone返回的是Object类型;
⑥查找元素
Array.IndexOf (数组,元素) //返回元素index 如果没有此元素,返回-1;
Array.IndexOf (arr,6)
Array.LastIndexOf (arr,2)
⑦数组排序
Array.Sort (arr);//无返回值
⑧ 数组反转
Array.Reverse (arr);
13.二维数组
int[,] a=new int[5,3];
也可以:
int[,] arr={
{1,2,3},
{4,5,6}
};
①二维数组也可以遍历
foreach(int each in arr){
Console.WriteLine (each);
}
② 获取数组行列数
Console
.
WriteLine
(
arr
.
GetLength
(
0
));
//行数
Console
.
WriteLine
(
arr
.
GetLength
(
1
));
//列数
14. 交错数组
int[][] arr;
arr=new int[4][];
arr[0]=new int[]{1,2,3};
arr[1]=new int[]{4,5};
arr[2]=new int[]{6};
arr[3]=new int[]{7,8,9,10};
arr[4]=new int[]{11,12};
交错数组的每个元素是一个数组
②交错数组也可以用foreach遍历 //双重遍历;
int[][] arr;
arr=new int[4][];
arr[0]=new int[]{1,2,3};
arr[1]=new int[]{4,5};
arr[2]=new int[]{6};
arr[3]=new int[]{7,8,9,10};
arr[0][0]=6;
foreach(int[] eachArr in arr){
foreach(int each in eachArr){
Console.Write(each+"\t");
}
Console.WriteLine();
}
注意!!!交错数组的每个元素是一个数组 所以for循环应该
for (int i = 0; i < arr.Length; i++)
{
for (int j = 0; j < arr[i].Length; j++)
{
Console.Write(arr[i][j] + "\t");
}
Console.WriteLine();
}
15. 参数数组
当参数类型确定但数量不确定时,用数组比较合适 由此引出:参数数组
参数数组写法:
private static int Sum(params int[] arr){}
传参时可以:
sum();
Sum(new int[]{1,2,3});
Sum(1,2,3);
参数数组特点总结:
①对方法内部而言,参数数组只是一个普通数组;
②对外部而言,可以 1.传递数组 2.传递变量合计 3.不传参