《流程控制(2学时)课件》由会员分享,可在线阅读,更多相关《流程控制(2学时)课件(32页珍藏版)》请在金锄头文库上搜索。
1、第3讲 流程控制,3.1 语句和块,3.1.1 语句 在Java语言中,有下面几类语句:空语句、标识语句、声明语句、表达式语句、分支语句、循环语句、跳转语句、同步语句、异常语句等。 有两种基本的语句:表达式语句和声明语句。 1、表达式语句:表达式加分号。 2、声明语句:声明语句声明一个变量,并可为其赋初值。 3.1.2 块 用一对花括号“ ”将零个或多个语句括起 来,就构成一个块(也称复合语句)。,3.2分支语句,3.2.1 if与if-else语句 1、if语句 if(表达式) 语句体 2、if-else语句 if(表达式) 语句体1 else 语句体2 上述语句均允许嵌套使用。,【例3.1
2、】 用Math类的random()方法产生一个字符,若该字符是一个大写英文字母,则输出“Yes!”,否则输出“No!”。 random()方法产生的随机数在0.0和1.0之间,乘以128后,其值在0.0和128.0之间,将它转换为char类型后,用if来判断是否在A 和Z之间。程序如下: class IsUpper public static void main(String args) char ch; ch=(char)(Math.random()*128); if(ch = A ,3.2.2 switch语句 switch多分支语句结构实际上也是一种if - else结构,不过它使得在编
3、码时很容易写出判断条件,特别是条件有很多选项而且比较简单的时候。switch的语法结构如下: switch(表达式) case 值1:语句1;break; case 值2:语句2;break; . . case 值N:语句N;break; default:语句N+1; 注意执行顺序,case与default的使用。,3.3 循环语句,循环语句的作用是使某一段程序根据需要重复执行多次。 循环语句实现的循环(或称重复)结构,是一种封闭结构,当循环条件被满足时,重复执行循环结构内的操作,当循环条件不被满足时,退出循环结构。 Java语言提供三种形式的循环语句:while循环语句、do - while
4、循环语句和for循环语句。,3.3.1 while语句 while语句的一般格式为: while( 表达式 ) 语句体 3.3.2 do-while语句 do 语句体 while(表达式 ); 3.3.3 for语句 for循环语句在几种循环语句中的格式与用法最灵活,它的一般格式为: for(表达式1;表达式2;表达式3)语句 注意3个表达式的意义。3个表达式在使用中可根据需要,部分或全部不写均可。,【例3.2】计算1 + 2 + 3 + . + 100。 一组有规律的数据的连续加或连续乘等计算一般都用循环程序来解决。 class Sum1To100 public static void ma
5、in(String args) int i,sum = 0; i=1; / 设循环初值 while(i = 100) / 设循环条件为 i=100 sum += i +; / 执行i+,当i的值到101时,条件即为false System.out.println(1到100的和为:+sum); 程序运行结果如下: 1到100的和为:5050,【例3.3】将键盘输入的数累加并显示累加和,直到输入0为止。 import java.util.Scanner; class ParseDemo public static void main(String args) Scanner sc = new S
6、canner(System.in); int n,sum=0; System.out.println(请输入数据,输入0 结束。); do n = sc.nextInt(); sum += n; System.out.println(当前的和是 : + sum); while(n != 0); System.out.println(“结束!); ,【例3.4】用for循环语句按10度的增量打印出一个从摄氏1090度到华氏温度的转换表。 class TempConversion public static void main (String args) int fahr,cels; System
7、.out.println(摄氏温度 华氏温度); for(cels = 10;cels = 90;cels += 10) fahr = cels * 9 / 5 + 32; System.out.println( + cels + + fahr); ,3.3.4 循环嵌套 循环嵌套是指在某个循环语句的循环体中又包含另一个循环语句,也称多重循环。外面的循环语句称为“外层循环”,外层循环的循环体中的循环称为“内存循环”。,【例3.5】 求3100之间的所有素数。 public class PrimeNumber public static void main(String args) System
8、.out.println(“ * 3100之间的所有素数 *”); int n = 0; for(int i = 3;i 100;i += 2) / 外层循环 int k = (int)Math.sqrt(i); boolean isPrime = true; for(int j = 2; j = k; j + ) / 内层循环 if( i%j = 0 ) isPrime = false; if(isPrime) System.out.printf(%4d,i); n +; / 控制每行打印10个素数 if( n % 10 = 0 )System.out.println(); System.o
9、ut.println(); ,程序运行结果如下: * 3100之间的所有素数 * 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97,3.4 标号和其他流程控制语句,3.4.1 标号 标号是一个标识符,用于给某程序块一个名字。格式如下: label:codeBlock 标号名用冒号与其后面的语句(块)分开。例如: Loop : for(int i = 0,sum = 0;i 10;i +)sum += i; 常与break、continue语句一起使用(Java没有goto语句)。 3.4.2 break语句
10、 break的功能是终止执行包含break语句的一个程序块。Break可用于switch或各种循环语句中。 格式如下: break label; break有两种形式:不带label和带label。 label是标号名,它必须位于break语句所在的封闭语句块的开始处。,【例3.6】用break终止循环。 class BreakLoop public static void main(String args) for(int i=0; i100; i+) if(i = 5) break; / 若i为5则终止循环 System.out.println(i: + i); System.out.pr
11、intln(Loop完成。); break语句只终止执行包含它的最小程序块,而当希望终止更外层的块,用带标号的break语句就可实现这种功能,它使得程序流程控制转移到标号指定层次的结尾。,【例3.7】用break终止外层循环。 class BreakDemo public static void main(String args) boolean t = true; first: / 定义块first second: / 定义块 second third: / 定义块 third System.out.println(在break之前。); if(t) break second; / brea
12、k终止second块 System.out.println(本语句将不被执行。); System.out.println(本语句将不被执行。); System.out.println(在second块后的语句。); ,3.4.3 continue语句 只能用在循环中,它的功能是使得程序跳过循环体中continue语句后剩下的部分(即短路),终止当前这一轮循环的执行。格式如下: continue 标号; continue语句有带标号和不带标号两种形式。不带标号的continue语句在while或do-while语句中使流程直接跳到循环条件的判断上;在for语句中则直接计算表达式3的值,再根据表达
13、式2的值是true或false决定是否继续循环。,【例3.8】以每行两个数据的格式输出数字0 9。 class ContinueDemo public static void main(String args) for(int i = 0; i 10; i +) System.out.print(i + ); if (i % 2 = 0) continue; System.out.println( ); /执行到continue时,println语句就跳过 continue语句和break语句一样,也可以和标号结合使用。这 个标号名必须放在循环语句之前,用于标志这个循环体。执 行了内循环体的c
14、ontinue语句后,将进行由标号标明的循环 语句的下一轮循环。,【例3.9】求3N之间的所有素数,使用带标号的continue语句。 import javax.swing.JOptionPane; class PrimeNbelow public static void main(String args) String s=JOptionPane.showInputDialog(N=); int n=Integer.parseInt(s); loop: for(int i=3;i=n; i+ ) for(int j=2;j=i/2;j+) if(i % j =0) continue loop
15、; System.out.printf(%4d,i); System.out.println(); ,在本程序中,执行到continue loop语句时,流程控制转移到loop标记的外层for循环的下一次循环中去执行。,3.4.4 return语句 退出当前方法,返回到调用该方法的语句处,并从紧跟该语句的下一语句继续程序的执行。return语句的格式如下: return 表达式;或 return(表达式); 当用void定义了一个返回值为空的方法时,方法体中不一定要有return语句,程序执行完,它自然返回。若要从程序中间某处返回,则可使用return语句。 若一个方法的返回类型不是void类型,那么就用带表达式的return语句。表达式的类型应该同这个方法的返回类型一致或小于返回类型。 例如一个方法的返回类型是double类型时,return语句表达式的类型可以是double、float或者是short、int、byte、char等。例如: double exam(int x,double y,boolean b) if(b) return x; else return y; ,3.5 变量和作用域,声明变量的两个位置:方法内和方法外,但必须在类的定义内。 1、方法内定义的变量称之为本地变量,也称之为自动、临时或堆栈变