上一篇我们讲了流程控制中的条件语句,条件语句讲了标准格式,基本格式,复杂格式;现在来说个名字,叫做嵌套,所谓嵌套就是嵌入套进去,那么条件语句嵌套就是在条件语句中再嵌套条件语句,什么情况下会进行嵌套呢,举个例子,先判断我们的工资是否大于5000,如果大于5000我们就想投资了,但是投资时候我们还是要判断收益率和本金,满足我们的要求才会投资,如果工资小于5000,那什么也别说,老实儿工作靠谱些
来看看伪代码;噢,对了一个概念,伪代码,伪代码就是按照代码的格式用我们可读的方式写出来的代码,可以阅读理解,但是无法运行,因为没有准确的语法,来看看
if (工资大于5000) {
//应该投资了
if(该理财产品收益率高,本金低){
投资
}else{
不投资了!
}
}else{
//这点儿工资啥也干不了
不投资了。。攒钱
}
这就是一种伪代码,标准的格式,非标准的语法和句柄,能看懂,不能执行;
这就用到了条件语句的嵌套;其实就是条件语句里面套了一层条件语句,并没有什么太特殊的,没事儿自己去试试;
有点要注意的就是在使用之前,先想好,有一个清晰的思路,用我一个朋友的话,就是女一女。。。当然他大舌头,实际是捋一捋!!捋清楚了再开始实现你个条件语句,绘制流程图,流程图这里就不介绍了,大家自己了解。
下面我们来了解下流程控制中的其他语句,
循环语句,循环语句的作用,不言而喻,就是用来做循环的,什么是循环呢?就是开始-->结束然后再开始,再结束,再开始在结束。。。知道我们不想让他再执行了,那么这个循环就结束了;
我们为什么要使用循环语句呢?举个最简单的例子,比如说现在呢,我们想要把1自加10次,其实不用循环也能实现,来看个例子
public class ProcessCycle{ public static void main(String [] args){ int index = 1; index = index + 1; index = index + 1; index = index + 1; index = index + 1; index = index + 1; index = index + 1; ... } }
这个例子是不能执行的。。。请注意噢,我偷了一下懒。执行十次,简单粗暴的来说我们手动写十行就行了,可是如果是要加100次,1000次呢?如果按这种方式,那估计你一天什么都不用干了,除了复制就是粘贴了;所以我们要使用循环语句,每次循环都执行相同的操作,只是参数不同了而已;
java中的循环语句有三种
for语句,while语句,do...while语句,
我们来一一了解,
循环语句1:for语句
标准格式如下:
for(初始化表达式; 判断表达式; 递增【或者递减】){
执行语句
}
初始化表达式,就是我们执行的起点,表达式呢就是我们执行的终点,这个递增或者递减表达式,是对初始化的变量,就是我们起点的那个变量的操作,其实这三个语句都是针对我们的for循环中使用的变量的,只有这个变量递增或者递减产生变化,才会在某些时候满足我们终点判断表达式,才能停止循环,否则的话,那就是死循环,没有终点。。。。说是死了,其实是活着一直在循环了。。。
来个例子大家就懂了,来,看代码
public class ProcessCycle{ public static void main(String [] args){ for(int i = 0; i < 10; i++){ System.out.println("i = " + i); } } }
第一句:int i = 0;可就是初始化语句,i < 10就是判断语句, i ++ 就是自加表达式
开始的时候我们初始化变量 i = 0,当i < 10的时候我们就进入循环体,执行打印的操作, 每次判断之后,我们让i 自加一次,我们动动手指头来数数,就知道执行十次之后就会停止了
来看看结果:
从0到9刚好十次,至于为什么不是从1到10我就不解释啦。自己考虑吧
一点,就是这个递增表达式,其实可以有多个,用逗号分隔即可
来看个例子
public class ProcessCycle{ public static void main(String [] args){ int n = 10; for(int i = 0; n > 0; i++, n--){ System.out.println("i = " + i); } } }
这里,判断表达式,我们的终点是n小于等于0的时候停止,因为进入循环的条件是n大于0,
运行结果是一样,我就不贴图了;
条件语句能嵌套,那循环语句肯定也可以嵌套,这个嵌套,我先不给例子,给大家留一道题,就是打印出来99乘法表,打印出来应该是 1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 .....
这个大家自己试试,下次我们来解答,注意了,我们循环的时候,一层循环里面,嵌套另一层循环,第一层循环执行的时候,第一次满足条件,开始执行循环体,从头到尾,执行完了才会进入下一次循环,如果这个方法体是也是一个循环的话,会发生什么呢?内层的循环会执行一次呢?还是全部执行完了,才会执行外层循环的第二次呢?答案是,会先执行完内层的全部循环,然后才会执行外层的第二次 。
其实还有个for循环的增强版,不过这个增强版涉及到了iterator(迭代器),这里就先不说了,免得说多了大家头晕,我们继续讲循环语句。
循环语句2:
while循环,while循环的标准格式如下
while(判断条件){
需要循环执行的语句
(这里是不是应该做点什么,以保证不会一直循环下去,出现死循环呢)
}
这个一看就知道好写很多,入口就一个判断条件,满足条件了就执行,注意一点,和for循环相比,入口处少了初始化,少了递增递减,但是这个其实是省不了的,因为,没有这些我们无法让循环停止下来
来个例子瞧瞧
public class ProcessCycleWhile{ public static void main(String [] args){ int i =0; while(i < 50){ System.out.println("i的值是:" + i); } } }
这就是while,如果变量我们想要用自己的,那么肯定是要初始化的,所以放在了外面,
如果你是个猴急的孩子,你会发现,一直输出 i 是多少,没停止啊?是的,这段代码少了一个关键的地方,那就是递增或递减操作,我们没对 i 做任何操作,所以i 始终是小于50的,那就无线的循环下去了,而且打出来的只有一句,那就是i 的值是0;
需要在这段袋中加一句 i ++;
这就完美了,,来看完整的代码
public class ProcessCycleWhile{ public static void main(String [] args){ int i =0; while(i < 50){ System.out.println("i的值是:" + i); i ++; } } }
来看看执行结果
看,执行到49就停止了,正好50次;
while循环,讲解完毕,感觉如何,循环是不是有点儿意思?
这个while循环是先判断了条件,满足条件的话就执行循环体中的语句;
而我们接下来要讲解的另一种循环语句
do ... while
和上面这个while刚好的是相反的,
来看看标准格式的例子
public class ProcessCycleDoWhile{ public static void main(String [] args){ int i = 0; do{ System.out.println("i 的值是: " + i); }while(i > 0); } }
这是标准格式,while后面跟的是判断语句,刚才我们说这个循环和第一个while循环相反,相反在哪里呢?
从代码看,我们从上向下执行,先do,进入循环体,然后while,就进行判断了,如果条件不满足,就不再执行了,如果满足就再执行,也就说不管我们条件成立不成立,都会执行一次;
执行下看看
我们初始化i 是0,然后我们对 i 做任何操作,i是不满足大于0这个条件的,但是运行结果发现,其实还是执行了一次,这就是do。。while,先执行后判断,不管条件是否成立,都会执行一次;
而while循环是先判断后执行,如果条件不成立,那么就一次都不会执行。
这个do...while个人觉得有点儿鸡肋,因为每次都是先执行了,才会判断,很容易出现问题,所以一般情况下不建议使用,除非是有这样的特殊的需求才会使用;
到此为止,三种循环方式就这么讲完了,我讲的很浅薄,很简单;都是最基本的
接下来,留两道作业题
好好理解下循环和应用循环的场景;
问题1:写一个应用程序,声明三个变量int i = 0; int index = 100; int sum = 0;
利用者三个变量和while循环,实现1到100的累加运算
问题2:写一个应用程序,实现输出100以内的数,要求这些数是3的倍数,但是不能是5的数,也不能是9的倍数,
提醒下,如何判断一个数a是不是另一个数b的倍数的方法,就是使用运算符 % 这个符号还记得么?
取余, 我们叫做模 a 模上b a % b ==0 如果成立的话,那么就证明a是b的倍数
好了,大家好好研究下;