流程控制
根据程序中当时的环境执行不同的代码,或者需要重复执行某段代码
- 分支:有条件的执行代码
- 循环:重复执行相同的代码
布尔运算符
Console.WriteLine(true ^ false); //异或,只有两个互不相同才返回true
goto语句
在程序中我们可以给代码加上标签,这样就可以使用goto语句直接调到标签的地方去执行
goto语句的语法 goto< labelName>;
标签定义 < labelName>;
int myInteger = 5;
goto mylabel; //goto语句用来控制程序跳转到某个标签的位置
myInteger++;
mylabel: Console.WriteLine(myInteger); //标签+:,跳转的位置
三元运算符
语法 < test>?< resultTrue> : < resultFalse>
< test>为布尔表达式(返回true或false),若为true则输出< resultTrue>;反之输出 < resultFalse>
循环的中断
- continue:结束这次循环,continue之后的语句不执行,然后判断条件进行下一次循环
- break:直接结束这个循环
- goto:跳转到循环外的标记
- return 用来终止方法,表示方法运行结束,剩余的代码不执行(直接跳出方法)
while(true)
{
int num = Convert.ToInt32(Console.ReadLine());
if(num == 0)
{
//continue;
//break;
//goto mylabel;
//return;
}
mylabel:
Console.ReadKey();
}
类型转换
- 隐式转换:编译器自动识别,不需要我们写更多的代码
- 显式转换:需要我们告诉编译器,什么类型转换成什么类型。也可以使用Convert命令进行显示转换
byte myByte = 111;
int myInt = myByte; //把一个小类型的数据赋值给一个大类型的变量时,编译器会自动进行类型的转换
myByte = (byte)myInt; //反之把一个大类型的数据赋值给一个小类型的变量时,需要进行显式转换(强制转换)
string str1 = Convert.ToString(123);
string str2 = 123 + ""; //也可以直接加上一个空的字符串
复杂的变量类型
除了简单的变量类型之外,C#还提供了3个复杂的变量:枚举、结构(体)和数组
枚举
枚举类型中的每一个值,其实都是一个整数,默认为int类型。默认情况下枚举类型中的值从0开始,不过我们可以在定义的时候使用“=”改变其序列
enum GameState :byte //修改该枚举类型的存储类型,默认是int
{ //默认是从0,1,2....
Pause =2, //修改后,后面的值索引会接着顺下去2,3,4.....
Failed,
Success,
Start=199 //也可以自己规定索引
}
class Program
{
static void Main(string[] args)
{
//利用定义好的枚举类型 声明变量,并赋值
GameState state =GameState.Start;
if (state ==GameState.Start)
{
int num = (int)state; //显式转换
Console.WriteLine(num);
Console.WriteLine(state);
}
Console.ReadKey();
}
}
}
结构(体)
namespace _006_结构体
{
enum Direction
{
North,
South,
West,
East
}
//一个结构体内包含若干变量,每个变量都是结构体的成员
struct Path
{
public float distance;
public Direction dir;
}
class Program
{
static void Main(string[] args)
{
Path path1; //结构体对象声明
path1.dir = Direction.North; //通过 . +属性名来访问结构体中的变量
path1.distance = 1000;
}
}
}
结构函数
我们可以在结构体中定义一个函数方法,这个函数就可以通过结构体声明的变量来调用,当带有参数的时候调用的时候必须传递参数。
namespace _007_结构函数
{
struct Vector3
{
public float x;
public float y;
public float z;
public double Distance()
{
return Math.Sqrt(Math.Pow(x,2) + Math.Pow(y, 2) + Math.Pow(z, 2));
}
}
class Program
{
static void Main(string[] args)
{
Vector3 myVector3;
myVector3.x = 3;
myVector3.y = 3;
myVector3.z = 3;
Console.WriteLine(myVector3.Distance());
Console.ReadKey();
}
}
}
数组
数组是一个变量的索引列表,这个索引是一个整数,第一个条目的索引是0,第二个是1,以此类推…
数组的初始化
int[] scores = {34,51,99}; //第一种方式
int[] scores;//第二种方式
scores = new int[10]; //每个元素按照类型的默认值赋值(0)
int[] scores = new int[3]{1,26,75}; //第三种方式
string[] names = new string[]{"jojo","欧拉欧拉","木大木大"}; //第四种方式,可以不指定长度
参数数组
调用参数数组的函数的时候,我们可以传递过来任意多个参数,然后编译器会帮我们自动拼成一个数组,帮我们减少了一个创建数组的过程
class Program
{
static void Main(string[] args)
{
int num = Plus(12, 45, 7, 9, 358, 135, 64);
Console.WriteLine(num);
Console.ReadKey();
}
static int Plus(params int[] array) //参数数组
{
int sum = 0;
for (int i = 0; i < array.Length; i++)
{
sum += array[i];
}
return sum;
}
}
数组的遍历
for、while、foreach
foreach(int temp in array)
{
Console.WriteLine(temp);
}
字符串的处理
string res = str.ToLower(); //把字符串转化为小写
string res = str.ToUpper(); //把字符串转化为大写
string res = str.Trim(); //去掉字符串前面和后面的空格
string res = str.TrimStart(); //去掉字符串前面的空格
string res =str.TrimEnd(); //去掉后面的空格
string[] strArray = str.Split("."); //按照指定的字符进行拆分,得到一个拆分后的字符串数组