if的进化,还是一种
if是否满足条件
if else 如果满足情况则,反之则,在一定要求下相对于上一个可以减少一次判断次数
if else if:
如果满足条件,如果不满足条件,则进入下一个判断,可以减少多次判断次数,难道设计出if else if 只是为了减少判断的次数,而不是
if:(我们是否执行一个操作)
if-else:(我们对两个操作选择一个执行)
if-else-if:(我们选择在多个操作中的一个执行,或者一个都不选)
在简单if/if-else下,不可以对一个情况进行多次条件判断的事,也就是if只能针对一个情况的是可能,if-else只能针对一种情况的是否可能,而if-else-if可以针对多个情况的是否可能,而多个情况的是否一定会产生交集,理解起来就会更复杂。
在一维下,一个情况的是否会涵盖所有,另一个情况的是否也会涵盖所有,,两个情况的是否的交集也就显而易见了,二维同上。而我们对int i;进行if时,我们应该看作几维?
那if的第一次进化,它解决了什么?它可以与第一次比较吗?也就是有可比性吗?
if:我们需要在一个事物的一个情况是的情况下执行操作
if-else:我们需要在一个事物的一个情况的是否可能下执行操作
if-else-if:我们需要在一个事物的多个情况的一个事物的是可能下执行操作
我们需要执行一个操作
在某种情况下
if/if-else只能针对于一种情况,if-else-if可以针对多个情况
if我们要在情况的是下执行一个操作
if-else因我们要根据情况的是否执行一个操作
if-else-if因我们要根据多个情况的一个情况的是执行一个操作
作比较if-else和if-else-if没有关联,if-else-if和if-else都只跟if有关
在这我们可以看出if其实并没有进化,后两种其实只是在if的基础上应对一些编程问题
再说if可以做if-else的事吗?
boolean b;
if(a==1){
b=true;
} else{
b=flase;
}
boolean b=flase;
if(a==1){
b=true;
}
两个效果一样,前一段代码可以解释成(在一个情况的是否可能下执行指定操作)
后一段代码可以解释成假定情况为否,(在判断在事务的一个情况是的情况下执行操作)
很明显,后一段代码,其实加了一个属于我们人类的逻辑步骤,而这个并不与if有关联,而if与if-else可以等价替换也是不合适的,也就是if不可以做if-else的事,而后面if可以做if-else-if也明显是不合适的。
但是if-else可以做到与if-else-if完全相同的效果
if(x<100) {
printf("A/n");
} else {
if(100<x<200) {
printf("B/n");
}else{
if(200<x<300) {
printf("C/n");
}else{
//......
}
}
}
if(0<x&&x<100) {
printf("A/d");
}else if(x>100&&x<200) {
printf("B/d");
}else if(x>200&&x<300) {
printf("C/d");
} else if(300<x<400){
//......
}
简单看来是if-else在内部继续进行if-else产生了和if-else-if一样的效果
前一段代码可以这么说对事务的一种情况进行判断后,再继续进行事物的另一种情况进行判断,直到找到一个事物的是
第二段代码if-else-if就是对事物的多个情况的一个情况的是执行操作
在这里可以得到跟之前一样的结论,第一段代码可以产生与第二段代码相同的效果是因为我没有单独使用if-else,而是组合使用if-else,做对比的时候只能写一样多的情况和一样多的操作,if和if-else和if-else-if的数量要一样,代码数量要一致。可以得出这三个if语句其实都是根据我们编码像表示的人类思维而对应,当我们赋予代码的意义无法表达我们的思维,我们就会设计新的语句,而这个计算机的思维和人类的思维其实说不定并不该照翁恺老师说的,计算机无法理解或者计算机与人类的思维有冲突,而是我们想用我们设计出来的一个工具(计算机)来表达我们的一个思维,但是我们所设计出来的工具做不到,其实或许从始至终参与者只有我们一个,这个工具也可以看作是我们,计算机并不适合看作是一个有独立思维的 。或许是我对它的看法有问题。
最后关于交集和代码顺序产生的一系列特殊效果,后面再说
if(x<100) {
printf("A/n");
} else {
if(x<200) {
printf("B/n");
}else{
if(x<300) {
printf("C/n");
}else{
//......
}
}
}
if(x<100) {
printf("A/d");
}else if(x<200) {
printf("B/d");
}else if(x<300) {
printf("C/d");
} else if(x<400){
//......
}
附加:switch case
switch case与if-else-if要解决的问题是一样的,而且如果在switch case的每个case后都加上break,这两者就是完全相等的?亦或者switch-case在每个case后都加上break,这两者可以完全互相转换吗?
它们要针对的问题是完全相同的吗,一个情况一个值,情况等价与值
switch case 根据值执行对应操作,if-else-if 根据情况执行对应操作,似乎没什么区别。