简洁的三元表达式,swicth-case,变量作用域与程序调试
直接进入主题!
1. 三元表达式: 由3个数据参与的表达式.
二元表达式: 算术表达式
一元表达式: 自增自减.
2. 三元表达式的语法:
bool表达式?值1:值2;
int i = 10;
i > 0 ? 100 : 200;
3. 三元表达式的结果.
如果bool表达式的结果为true 那么这个三元表达式的结果就为值1;
如果bool表达式的结果为false 那么这个三元表达式的结果就为值2;
三元表达式的结果的类型和值1、值2的类型一致.
4. 三元表达式中的 值1和值2的类型要求一致或者兼容.
如果值1和值2的类型兼容 那么三元表达式的结果的类型是范围比较大的那个.
int i = 10; byte b = 200; short s = 300; short s1 = i > 0 ? b : s;
5. 值1和值2 不仅可以直接写1个数据 还可以写1个表达式 但是表达式的结果一定要相同或者兼容.
//求两个数中的最大数? int i1 = 220, i2 = 130, i3 = 40; //先 求出i1和i2中的最大值. 将他和i3比. // int secMax = i1 > i2 ? i1 : i2;//存储的是i1和i2中的最大值. int max = (i1 > i2 ? i1 : i2) > i3 ? (i1 > i2 ? i1 : i2) : i3; Console.WriteLine(max);
6. 三元表达式并不是来代替if-else的.
---------------------------------------------------------------------------------------------------------------
swicth-case
1. 语法
swicth(表达式)
{
case 值1:
执行代码;
break;
case 值2:
执行代码;
break;
case 值3:
执行代码
break
default:
执行代码;
break;
}
2. 执行步骤
先计算switch后面的表达式的结果.将这个结果和每1个case块后面的值做相等判断.
只要有1个case块后面的值和swtch表达式的结果相等 那么就会执行这个case块里面的代码.
执行完毕以后 跳出整个swicth结构
如果有的case块后面的值都不予switch表达式的结果相等 那么就执行default中的代码.
3. 需要注意的细节
a. switch后面的小括弧中的表达式的结果可以是任意类型的. 但是不能为浮点型.
b. case块和default后面的break 绝大多数情况下必不可少.
c. case块后面的值得类型 必须要与 switch表达式的类型一致. 因为执行的时候是讲switch表达式的结果和case后面的值做相等比较.
d. case块的后面的值也可以是1个表达式 但是表达式的结果要和switch表达式的结果的类型一致.
虽然case块的后面可以写1个表达式 但是这个表达式不能有变量参与.
e. 如果多个case块的处理逻辑相同 那么可以简写.
f. case块后面的值是不能重复的,否则就没有什么意义了.
g. case块可以有任意个 根据具体的情况来.
h. defualt 是可以省略 如果省略的话 那么当所有的case块的值都不匹配的时候 就没有默认执行代码了.
4. 我们发现: switch-case结构 和 if结构 非常的相像.
a. switch-case结构可以写的 那么 使用if结构也可以写.
if结构可以写的 不一定可以用switch
swicth-case结构 只能做相等判断. 不能直接做范围判断.
if结构 不仅可以做相等判断 还可以做范围判断.
b. if结构可以做switch做的事情.
c. 其实任何情况下都可以使用if结构.
我们的建议: 如果是做相等判断 使用switch-case
如果是做范围判断 使用if结构 。
//请用户输入年份,再输入月份.然后打印这个1年的这个月有多少天? //1 3 5 7 8 10 12 31 //4 6 9 11 30 //2 如果是闰年 29 不是闰年28 Console.WriteLine("请输入年份:"); int year = int.Parse(Console.ReadLine()); Console.WriteLine("请输入月份:"); int month = int.Parse(Console.ReadLine()); switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: Console.WriteLine("{0}年的{1}月有31天", year, month); break; case 4: case 6: case 9: case 11: Console.WriteLine("{0}年的{1}月有30天", year, month); break; case 2: 判断年份是否闰年. if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) { Console.WriteLine("{0}年的{1}月有29天", year, month); } else { Console.WriteLine("{0}年的{1}月有28天", year, month); } break; }
---------------------------------------------------------------------------------------------------------
变量的作用域
1. 变量的作用域: 变量可以在那段范围中访问.
2. 定义在某个大括弧中的变量, 那么这个变量就只能在这个大括弧中访问.
出了大括弧就无法访问了.
3. 我们声明1个变量 其实就是在内存中开辟1块空间用来存储数据,那么这个空间开辟了以后.
需不需要回收呢?
当然需要,如果不回收的话 那就惨了 终有1点 内存满了 崩溃了.
当执行完1个大括弧以后,定义在这个大括弧中的变量就会被系统立即回收.
所以在1个大括弧的外面 无法访问定义在这个大括弧中的变量.
4. 定义在外面的大括弧中的变量 可以在 里面的大括弧中访问.
因为里面的大括弧在外面的大括弧中.
int i = 12; if (i > 20) { int j = 10; j = 11; Console.WriteLine(j); } Console.WriteLine(j);
结果报错!第二个
Console.WriteLine(j);
上下文中不存在j
-------------------------------------------------------------------------------------------------------------------------
程序调试
1. 当我们把我们写的代码运行起来的时候.
VS会帮助我们将源代码生成程序集 然后将程序集运行起来.
CPU在运行程序的时候. 是刷的一下 将程序一下子执行完毕. 因为CPU的速度很快.
2. CPU在执行代码的时候,将Main函数中的代码从上到下一句一句的执行的.
我们的希望: CPU啊你慢些走. 让我看看你的步骤
我们就可以使用调试来实现这个功能.
3. 断点:
在代码的左边点击1下 就会产生1个断点.
断点的作用:我们以调试模式运行程序以后,当CPU执行到断点这句代码的时候 CPU就会停住脚步.
什么叫以调试模式运行:直接按下F5或者点击运行按钮.
停住以后,就会以黄色高亮选中这行代码. 黄色高亮选中的代码代表CPU立即要执行这句代码.但是没有执行.
等着我们给它发送指令.
F10: 表示让CPU执行当前黄色高亮选中的代码.
CPU执行完毕以后 就会黄色高亮选中下1次要执行的带啊.并且停住 等我们的指令.
4. 调试的主要的目的在于可以监测各个变量在程序运行的时候的值.
通过监视变量的值 来排除程序的错误.
5. 如果在调试的过程中,不希望程序1步1步的执行 希望刷的一下执行,那么按下继续