Day02
占位符
占位符 {0}:代表第一个变量 ( gunName )
占位符 {1}:代表第二个变量( ammoCapacity)
//写法1
string gunName = "AK47";
string ammoCapacity = "30";
Console.WriteLine("枪的名称为:" + gunName + ",容量为:" + ammoCapacity);
//写法2
//占位符写法
string str = String.Format("枪的名称为:{0},容量为:{1}", gunName, ammoCapacity);
Console.WriteLine(str);
标准数字字符串格式化
例:{0:c}、{0:d2}、{0:f1}、{0:p1}
Console.WriteLine("金额:{0:c}", 10);//货币¥10.00
Console.WriteLine("{0:d2}", 1);//不足两位的用0补充成两位
Console.WriteLine("{0:f1}", 1.62);//以一定的精度进行四舍五入//1.6
Console.WriteLine("{0:p1}", 0.21);//以百分数显示,百分号后面有一个0
赋值运算符
- 将右边的结果复制一份给左边。
int a=1;
- 赋值表达式自身也有值,其本身值为所赋值。
int num01, num02;
num01 = num02=1;
转义字符:改变字符原始含义
Console.WriteLine("我爱\"unity!\"");
char c1 = '\'';//可以在控制台显示引号" "
Console.WriteLine(c1);
char c2 = '\0';//空字符
Console.WriteLine(c2);
//回车换行:\r\n
//空格(水平制表格):\t
运算符
1.算数运算符"+“、”-" 、“*”、“/”、“%”
//获取个位
int n1 = 24;
int r4 = n1 % 10;
Console.WriteLine(r4);
2.连接运算符"+"
string s1 = "5", s2 = "2";
Console.WriteLine(s1+s2);//这里面的加指的是字符的拼接
3.比较运算符:>、<、>=、<=、等于==、不等于!=
注:文本不能使用
bool r7 = s1 == s2
4.逻辑运算符
- &&(与)、||(或)、!(非)
- 参与逻辑运算的变量或表达式都是bool类型,结果也为bool类型。
5.快捷运算符
+=, - =,* =,/ = ,% =
int num01 = 1;
//num01 = num01 + 5;//一个变量num01加上另一个数,再赋值给自己
num01 += 5;
Console.WriteLine(num01);
6.一元运算符+ + - -
- 后缀增量操作i++:返回的结果为自增以前的值。
- 前缀增量操作++i: 返回的结果为自增以后的值。
//(1)无论先加还是后加 对与 [下一条指令],都是自增以后的值(对于下一条指令没有影响)
int number01 = 1;
number01++;
Console.WriteLine(number01);//2
int number02 = 1;
++number02;
Console.WriteLine(number02);//2
//(2)后加-> 后自增-> 返回值
int number03 = 1;
Console.WriteLine(number03++);//1 结果:自增以前
//(3)先加-> 先自增-> 后返回值
int number04 = 1;
Console.WriteLine(++number04);//2 结果:自增以后
7.三元运算符
数据类型 变量名 + 条件 ? 结果(满足条件的结果: 不满足条件的结果结果;)
string str01 = 1 > 2 ? "ok" : "no";//后面两个类型要相同
Console.WriteLine(str01);
8.运算符优先级
先乘除 后加减 小括号优先级最高
基本数据类型转换
1. Parse转换 : string 转换为 其他数据类型
//string "18" ==> int 18
//待转数据 必须"像”该数据类型
string strNumber = "18";
int num01 = int.Parse(strNumber);//18 将string转换成int类型
float num02 = float.Parse(strNumber);//18.0
2. ToString转换 : 任意类型转换成string(字符串)类型
int number = 18;
string str = number.ToString();
3. 折叠代码操作
#region
#endregion//折叠代码
4. 练习 :让用户在控制台中输入一个4位整数,计算每位相加和
例如 : 1234 ==》 1+2+3+4 ==》 10
方案1:从整数中获取每位
Console.WriteLine("请输入4位整数 :");
string strNumber01 = Console.ReadLine();
//1234” --> 1234(将字符串类型1234转化为int型1234)
int number01 = int.Parse(strNumber);
int result = number % 10;//个位
result += number / 10 % 10;// 十位
result += number / 100 % 10;//百位
result += number / 1000;// 千位
Console.WriteLine("结果为 :" + result);
方案2 : 从字符串中获取每个字符
//string str02 ="1234"
//char c1 = str02[0];// 1’ ==》"1" ==>1
char c1 = strNumber[0];//1'
string s1 = c1.ToString();//“1”
int n1 = int.Parse(s1);
int result02 = n1;//千位
result02 += int.Parse(strNumber[1].ToString());//百位
result02 += int.Parse(strNumber[2].ToString());//十位
result02 += int.Parse(strNumber[3].ToString());//个位
Console.WriteLine("结果为 :" + result02);
5. 隐式转换(由小范围到大范围的自动转换)
- 由小类型到大类型的自动转换。
inti=1; // 4字节
long I = i; // 8字节
- 多种类型变量参与的运算,会产生类型提升。
----其中一方为long 类型,结果为long 类型
----其中一方为float类型,结果为float类型
—其中一方为double 类型,结果为double 类型
—其中一方为decimal类型,结果为decimal类型
—其余运算结果为int类型
long result =i+I;
6. 显式转换(由大范围到小范围的强制转换)
有可能造成精度丢失。
int i4 = 100;
byte b4 = (byte)i4;//想转什么括号里面就是什么
//隐式 显式 通常发生在数值之间
//有多种变量参与运算,结果自动向较大的类型提升
byte number1 = 1;
short number2 = 2;
//short result1 = (short)(number1 + number2);
int result1 = number1 + number2;//失败看提示
例子 : 两者相等吗(不相等)
byte b = 250;
b += 3;//快捷运算符,不做自动类型提升
//b = b + 3;异常
注意事项:
- 浮点型和 decimal 类型之间不存在隐式转换。
因此,必须使用显式转换。 - 非整形只能显式转换到整形
语句 : 选择语句
代码块与作用域
- 在程序中可以使用一对大括号框住一部分代码,被框住的代码区域称之为代码块。
- 作用域可以理解为起作用的范围。
- 局部变量作用域:从声明开始,到所属 } 结束。
1.if–else语句
例:让用户在控制台中输入两个数计算加减乘除
//1.获取数据
Console.WriteLine("请输入第一个数字 :");
string strNumberOne = Console.ReadLine();
float numberOne = float.Parse(strNumberOne);
Console.WriteLine("请输入第二个数字 :");
float numberTwo = float.Parse(Console.ReadLine());
Console.WriteLine("请输入运算符:");
string op = Console.ReadLine();
//2.逻辑处理
float result;
if (op == "+") result = numberOne + numberTwo;
else if (op == "-")
result = numberOne - numberTwo;
else if (op == "*") result = numberOne * numberTwo;
else if (op == "/") result = numberOne / numberTwo;
else result = 0;
//3.显示结果
if (op == "+" || op == "-" || op == "*" || op == "/")
Console.WriteLine("结果为" + result);
else Console.WriteLine("运算结果有误");
- if可以单独出现,但else不行
- 大括号里面如果只有一句话,大括号可以不写
- 每 个else总属于前面最近的 if 语句。
2.switch–case语句
//2.逻辑处理
float result;
switch (op)
{
case "+":
result = numberOne + numberTwo;
break;
case "-":
result = numberOne - numberTwo;
break;
case "*":
result = numberOne * numberTwo;
break;
case "/":
result = numberOne / numberTwo;
break;
efault:
result = 0;
break;
}
//3.显示结果
if (op == "+" || op == "-" || op == "*" || op == "/")
Console.WriteLine("结果为" + result);
else
Console.WriteLine("运算结果有误");
- switch()中的变量可以是整形、string、bool、char、枚举或相应可以为null的类型,必须有一个定值。
- 每个case标签后是常量表达式的值,不必连续,也不必按
特定顺序排列,但不能相同,否则会出现错误。 - default标签可选,意思是其余的结果。
- break语句的作用是在case与case之间中断程序。
- switch……case与if……else区别:
都可以用来实现多路分支。
If eles实现两路、三路分支比较方便,switch……case实现三路以上分支结构更清晰,代码可读性更强。
3.短路逻辑(将简单的逻辑放在前面)
int n1 = 1, n2 = 2;
//false && ?
bool re1 = n1 > n2 && n1++ > 1;
Console.WriteLine(re1);//1
//true && ?
bool re2 = n1 < n2 || n2++ < 1;
Console.WriteLine(re2);//2