语言程序设计刘炯西安电子科技大学–通信工程学院2第四章循环学习目标使用while、dowhile和for语句来控制语句的重复理解循环语句的控制流程使用布尔表达式来控制循环语句了解三种循环类型的异和同编写嵌套循环使用break和continue语句来实现程序控制3while循环while(loop-continuation-contition){//loopbodystatement(s);}Loopcontinuationcondition?statement(s)(loopbody)truefalse//1加到100intsum=0;intnumber=1;while(number=100){sum=sum+number;number++;}例子流程图sum=0;number=1;(number=100)?sum=sum+number;number++;truefalse4跟踪whileloop:intsum=0;intnumber=1;while(number=100){sum=sum+number;number++;}初始化sum、number5跟踪whileloop:intsum=0;intnumber=1;while(number=100){sum=sum+number;number++;}(number=100)istrue6跟踪whileloop:intsum=0;intnumber=1;while(number=100){sum=sum+number;number++;}执行加法7跟踪whileloop:intsum=0;intnumber=1;while(number=100){sum=sum+number;number++;}number+1,现在是28跟踪whileloop:intsum=0;intnumber=1;while(number=100){sum=sum+number;number++;}现在number是29跟踪whileloop:intsum=0;intnumber=1;while(number=100){sum=sum+number;number++;}执行加法10跟踪whileloop:intsum=0;intnumber=1;while(number=100){sum=sum+number;number++;}number+1,现在是3依此类推......11跟踪whileloop:intsum=0;intnumber=1;while(number=100){sum=sum+number;number++;}现在number是10012跟踪whileloop:intsum=0;intnumber=1;while(number=100){sum=sum+number;number++;}执行加法13跟踪whileloop:intsum=0;intnumber=1;while(number=100){sum=sum+number;number++;}number+1,现在是10114跟踪whileloop:intsum=0;intnumber=1;while(number=100){sum=sum+number;number++;}现在number是10115跟踪whileloop:intsum=0;intnumber=1;while(number=100){sum=sum+number;number++;}跳出循环,执行下一条语句16结束循环执行的循环次数通常都是不能预测的。可能要使用一个输入值来标志循环的结束。这样的值称为标志值(sentinelvalue).下面的例子用来计算若干个整数之和,输入0则表示结束。17importjavax.swing.JOptionPane;publicclassSentinelValue{publicstaticvoidmain(String[]args){StringdataString=JOptionPane.showInputDialog(Entervalue(0toexit));intdata=Integer.parseInt(dataString);intsum=0;while(data!=0){sum=sum+data;dataString=JOptionPane.showInputDialog(Entervalue(0toexit));data=Integer.parseInt(dataString);}//DisplayresultJOptionPane.showMessageDialog(null,Sum=+sum);}}18注意:在循环控制中不要比较浮点数相等。因为浮点数是近似的,使用它们可能导致不精确的循环次数和不准确的结果。doubledata=Math.pow(Math.sqrt(2),2)-2;if(data==0){System.out.println(dataiszero);}else{System.out.println(dataisnotzero);}19do-while循环do{//loopbodystatement(s);}while(loop-continuation-contition);Loopcontinuationcondition?statement(s)(loopbody)truefalse流程图同while循环相比,在do-while循环中,循环体至少会被执行一次。20for循环for(initial-action;loop-continuation-condition;action-after-each-iteration){//loopbodystatement(s);}Loopcontinuationcondition?statement(s)(loopbody)truefalseinitial-actionaction-after-each-iteration//1加到100intsum=0;intnumber;for(number=1;number=100;number++){sum=sum+number;}(number=100)?sum=sum+numbertruefalsenumber=1number++21跟踪for循环:intsum=0;intnumber;for(number=1;number=100;number++){sum=sum+number;}初始化sum、定义number22跟踪for循环:intsum=0;intnumber;for(number=1;number=100;number++){sum=sum+number;}初始化number=123跟踪for循环:intsum=0;intnumber;for(number=1;number=100;number++){sum=sum+number;}此时number=1,满足条件24跟踪for循环:intsum=0;intnumber;for(number=1;number=100;number++){sum=sum+number;}执行加法25跟踪for循环:intsum=0;intnumber;for(number=1;number=100;number++){sum=sum+number;}一轮循环完成,执行number++number现在是226跟踪for循环:intsum=0;intnumber;for(number=1;number=100;number++){sum=sum+number;}此时number=2,满足条件27跟踪for循环:intsum=0;intnumber;for(number=1;number=100;number++){sum=sum+number;}执行加法依此类推......28跟踪for循环:intsum=0;intnumber;for(number=1;number=100;number++){sum=sum+number;}一轮循环完成,执行number++number现在是101直到number=10029跟踪for循环:intsum=0;intnumber;for(number=1;number=100;number++){sum=sum+number;}此时number=101,不满足条件30跟踪for循环:intsum=0;intnumber;for(number=1;number=100;number++){sum=sum+number;}退出for循环31注意:for循环的初始条件可以是0个或多个逗号分隔开的表达式。for循环中迭代之后的动作也可以是0个或多个逗号隔开的语句。因此,下面的两个for循环是正确的,尽管实际中很少用到它们。for(inti=1;i100;System.out.println(i++));for(inti=0,j=0;(i+j10);i++,j++){//Dosomething}32注意:如果for循环中的继续循环条件(loop-continuation-condition)被忽略,那么它是隐式为true的for(;;){//loopstatement(s)}等效于while(true){//loopstatement(s)}这是一个无限循环,建议使用这种形式。33举例:编写程序计算从0.01到1.0的数列之和,数列以0.01递增,即0.01+0.02+0.03+…等等importjavax.swing.JOptionPane;publicclassSumTest{publicstaticvoidmain(String[]args){doublesum=0;for(doubledata=0.01;data=1.0;data+=0.01){sum=sum+data;}//DisplayresultJOptionPane.showMessageDialog(null,Sum=+sum);}}34举例:嵌套循环编写九九乘法表importjavax.swing.JOptionPane;publicclassMultiplicationTable{publicstaticvoidmain(String[]args){for(inti=1;i=9;i++){for(intj=1;j=i;j++){System.out.printf(%d*%d=%2d,j,i,i*j);}System.out.println();}}}1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81输出结果:35格式化输出JDK1.5引入一种新的printf方法System.out.printf(format,items);format是一个子串和格式描述符构成的字符串。格式描述符(specifier)指定每个项目应该如何显示。项目可以是数值、字符、布尔值或字符串。每个描述符以百分号开头。format的格式同c/c++中的相同36常用的格式描述符格式描述符输出举例%b布尔值true/false%c字符'a'%d十进制整型数256%f浮点数3.14159%e科学计数法表示的浮点数1.2e+2%s字符串Hello,worldintstudentNum