Java语言程序设计-4.pptx_第1页
Java语言程序设计-4.pptx_第2页
Java语言程序设计-4.pptx_第3页
Java语言程序设计-4.pptx_第4页
Java语言程序设计-4.pptx_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、语言程序设计,刘炯 西安电子科技大学 通信工程学院,第四章 循环,学习目标 使用while、do while和for语句来控制语句的重复 理解循环语句的控制流程 使用布尔表达式来控制循环语句 了解三种循环类型的异和同 编写嵌套循环 使用break和continue语句来实现程序控制,while循环,while (loop-continuation-contition) / loop body statement(s); ,Loop continuation condition?,statement(s) (loop body),true,false,/ 1 加到 100 int sum = 0

2、; int number = 1; while (number = 100) sum = sum + number; number+; ,例子,流程图,sum=0; number=1;,(number = 100)?,sum = sum + number; number+;,true,false,跟踪 while loop:,int sum = 0; int number = 1; while (number = 100) sum = sum + number; number+; ,初始化 sum、number,跟踪 while loop:,int sum = 0; int number =

3、1; while (number = 100) sum = sum + number; number+; ,(number = 100) is true,跟踪 while loop:,int sum = 0; int number = 1; while (number = 100) sum = sum + number; number+; ,执行加法,跟踪 while loop:,int sum = 0; int number = 1; while (number = 100) sum = sum + number; number+; ,number+1,现在是 2,跟踪 while loop

4、:,int sum = 0; int number = 1; while (number = 100) sum = sum + number; number+; ,现在 number 是 2,跟踪 while loop:,int sum = 0; int number = 1; while (number = 100) sum = sum + number; number+; ,执行加法,跟踪 while loop:,int sum = 0; int number = 1; while (number = 100) sum = sum + number; number+; ,number+1,

5、现在是 3,依此类推 . .,跟踪 while loop:,int sum = 0; int number = 1; while (number = 100) sum = sum + number; number+; ,现在 number 是 100,跟踪 while loop:,int sum = 0; int number = 1; while (number = 100) sum = sum + number; number+; ,执行加法,跟踪 while loop:,int sum = 0; int number = 1; while (number = 100) sum = sum

6、 + number; number+; ,number+1,现在是101,跟踪 while loop:,int sum = 0; int number = 1; while (number = 100) sum = sum + number; number+; ,现在 number 是 101,跟踪 while loop:,int sum = 0; int number = 1; while (number = 100) sum = sum + number; number+; ,跳出循环,执行下一条语句,结束循环 执行的循环次数通常都是不能预测的。可能要使用一个输入值来标志循环的结束。这样的

7、值称为标志值(sentinel value). 下面的例子用来计算若干个整数之和,输入0则表示结束。,import javax.swing.JOptionPane; public class SentinelValue public static void main(String args) String dataString = JOptionPane.showInputDialog( Enter value ( 0 to exit); int data = Integer.parseInt(dataString); int sum = 0; while (data != 0) sum =

8、sum + data; dataString = JOptionPane.showInputDialog( Enter value ( 0 to exit); data = Integer.parseInt(dataString); / Display result JOptionPane.showMessageDialog(null, Sum = + sum); ,注意: 在循环控制中不要比较浮点数相等。因为浮点数是近似的,使用它们可能导致不精确的循环次数和不准确的结果。,double data = Math.pow(Math.sqrt(2), 2) - 2; if (data = 0) S

9、ystem.out.println(data is zero); else System.out.println(data is not zero); ,do-while 循环,do / loop body statement(s); while (loop-continuation-contition);,Loop continuation condition?,statement(s) (loop body),true,false,流程图,同 while 循环相比,在do-while循环中, 循环体至少会被执行一次。,for 循环,for (initial-action; loop-con

10、tinuation-condition; action-after-each-iteration) / loop body statement(s); ,Loop continuation condition?,statement(s) (loop body),true,false,initial-action,action-after-each-iteration,/ 1 加到 100 int sum = 0; int number; for (number=1; number=100; number+) sum = sum + number; ,(number=100)?,sum=sum+

11、number,true,false,number=1,number+,跟踪 for 循环:,int sum = 0; int number; for (number=1; number=100; number+) sum = sum + number; ,初始化 sum、定义number,跟踪 for 循环:,int sum = 0; int number; for (number=1; number=100; number+) sum = sum + number; ,初始化 number = 1,跟踪 for 循环:,int sum = 0; int number; for (number

12、=1; number=100; number+) sum = sum + number; ,此时 number = 1,满足条件,跟踪 for 循环:,int sum = 0; int number; for (number=1; number=100; number+) sum = sum + number; ,执行加法,跟踪 for 循环:,int sum = 0; int number; for (number=1; number=100; number+) sum = sum + number; ,一轮循环完成,执行number+ number现在是2,跟踪 for 循环:,int s

13、um = 0; int number; for (number=1; number=100; number+) sum = sum + number; ,此时 number = 2,满足条件,跟踪 for 循环:,int sum = 0; int number; for (number=1; number=100; number+) sum = sum + number; ,执行加法,依此类推 . .,跟踪 for 循环:,int sum = 0; int number; for (number=1; number=100; number+) sum = sum + number; ,一轮循环

14、完成,执行number+ number现在是101,直到 number=100,跟踪 for 循环:,int sum = 0; int number; for (number=1; number=100; number+) sum = sum + number; ,此时 number = 101,不满足条件,跟踪 for 循环:,int sum = 0; int number; for (number=1; number=100; number+) sum = sum + number; ,退出 for 循环,注意: for 循环的初始条件可以是 0 个或多个逗号分隔开的表达式。 for 循环

15、中迭代之后的动作也可以是 0 个或多个逗号隔开的语句。 因此,下面的两个for 循环是正确的,尽管实际中很少用到它们。,for (int i = 1; i 100; System.out.println(i+);,for (int i = 0, j = 0; (i + j 10); i+, j+) / Do something ,注意: 如果for 循环中的继续循环条件( loop-continuation-condition)被忽略,那么它是隐式为true 的,for ( ; ; ) / loop statement(s) ,等效于,while (true) / loop statement

16、(s) ,这是一个无限循环,建议使用这种形式。,举例:,编写程序计算从0.01到1.0的数列之和,数列以0.01递增,即0.01+0.02+0.03 + 等等,import javax.swing.JOptionPane; public class SumTest public static void main(String args) double sum = 0; for (double data = 0.01; data = 1.0; data += 0.01) sum = sum + data; / Display result JOptionPane.showMessageDialo

17、g(null, Sum = + sum); ,举例:嵌套循环,编写九九乘法表,import javax.swing.JOptionPane; public class MultiplicationTable public static void main(String args) for (int i=1; i=9; i+) for (int j=1; j=i; j+) System.out.printf(%d*%d=%2d , j, i, i*j); System.out.println(); ,1*1= 1 1*2= 2 2*2= 4 1*3= 3 2*3= 6 3*3= 9 1*4= 4

18、 2*4= 8 3*4=12 4*4=16 1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25 1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81,输出结果:,格式化输出,JDK 1.5引入一种新的printf方法

19、 System.out.printf(format, items); format 是一个子串和格式描述符构成的字符串。格式描述符(specifier)指定每个项目应该如何显示。项目可以是数值、字符、布尔值或字符串。每个描述符以百分号开头。 format 的格式同c/c+中的相同,常用的格式描述符,int studentNumber = 80; double averageScore = 76.3; System.out.printf(Java course: total %d students, average score is %f, studentNumber, averageScore

20、);,输出: Java course: total 80 students, average score is 76.300000,创建格式化的字符串 String.format(format, items); 使用方法同 System.out.printf(format, items);,采用哪种循环?,三种形式的循环语句 while,do-while 和 for 在表达上都是等价的 。这也就说,可以用三种循环的任一种。,等效于,while (loop-continuation-condition) / loop statement(s) ,for ( ; loop-continuation

21、-condition; ) / loop statement(s) ,for (initial-action; loop-continuation-condition; action-after-each-iteration) / loop statement(s) ,initial-action; while (loop-continuation-condition) / loop statement(s) action-after-each-iteration; ,等效于,while 循环转换为 for 循环,for 循环转换为 while 循环,建议使用自己觉得最自然、最舒服的一种。 通

22、常,如果重复次数已经知道,就采用for循环,例如将一条信息打印100次。 如果不知道重复次数,就采用while循环,例如读入一些数值直到读入0为止。 如果在检验循环条件前需要执行循环体,就用do-while循环替代while循环。,注意,在for/while循环子句之后循环体之前多写分号是常见的错误,如下所示: 但是在 do-while 循环中,while 子句必须要以分号结尾:,for (int i=0; i100; i+); System.out.println(i); ,int i=0; while (i100); System.out.println(i); i+; ,int i=0;

23、 do System.out.println(i); i+; while (i 1; System.out.println(); ,举例:输出二进制格式(32bit版本),import java.util.Scanner; public class BinaryFormat2 public static void main(String args) System.out.print(Please input a integer number:); Scanner scanner = new Scanner(System.in); int number = scanner.nextInt();

24、System.out.print(number + =); int cutter = 0 x01 1; System.out.println(); ,举例:输出二进制格式(使用JDK),import java.util.Scanner; public class BinaryFormat3 public static void main(String args) System.out.print(Please input a integer number:); Scanner scanner = new Scanner(System.in); int number = scanner.next

25、Int(); String binaryString = Integer.toBinaryString(number); System.out.print(number + = + binaryString); ,提示: 尽量使用 JDK 中已有的功能,可以起到事半功倍的效果。,使用break和continue,break:用于跳出循环 continue:执行下一次循环 break 和 continue 只用于 for/do.while/while 循环中 注:break 还可以用在 switch 语句中,break的例子:求最大公约数(改进版),TODO:例子、,import javax.s

26、wing.JOptionPane; public class GreatestCommonDivisor2 public static void main(String args) String s1 = JOptionPane.showInputDialog(Enter first integer); int n1 = Integer.parseInt(s1); String s2 = JOptionPane.showInputDialog(Enter second integer); int n2 = Integer.parseInt(s2); int gcd = 1; int k = M

27、ath.min(n1, n2); while (k 1) if ( (n1 % k = 0) ,continue的例子:求最大公约数,import javax.swing.JOptionPane; public class GreatestCommonDivisor3 public static void main(String args) String s1 = JOptionPane.showInputDialog(Enter first integer); int n1 = Integer.parseInt(s1); String s2 = JOptionPane.showInputDialog(Enter second inte

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论