收藏 分享(赏)

Java语言程序设计-基础篇-中文ppt-第四章.ppt

上传人:guanlirenli 文档编号:3206938 上传时间:2018-10-07 格式:PPT 页数:48 大小:254.50KB
下载 相关 举报
Java语言程序设计-基础篇-中文ppt-第四章.ppt_第1页
第1页 / 共48页
Java语言程序设计-基础篇-中文ppt-第四章.ppt_第2页
第2页 / 共48页
Java语言程序设计-基础篇-中文ppt-第四章.ppt_第3页
第3页 / 共48页
Java语言程序设计-基础篇-中文ppt-第四章.ppt_第4页
第4页 / 共48页
Java语言程序设计-基础篇-中文ppt-第四章.ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

1、Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807,1,第4章 循 环,2,引言,假设你需要打印一个字符串 (例如: “Welcome to Java!”)100次。这就需要把下面的输出语句重复100遍,过程是相当繁琐:System.out.println(“Welcome to Java!“);所以,该如何解决这个问题?,3,开放问题,System.out.println(“Welcome to Jav

2、a!“); System.out.println(“Welcome to Java!“); System.out.println(“Welcome to Java!“); System.out.println(“Welcome to Java!“); System.out.println(“Welcome to Java!“); System.out.println(“Welcome to Java!“); System.out.println(“Welcome to Java!“); System.out.println(“Welcome to Java!“); System.out.pri

3、ntln(“Welcome to Java!“);,问题:,100次,4,介绍while循环,int count = 0; while (count 100) System.out.println(“Welcome to Java“);count+; ,Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807,5,学习目标,使用while循环编写重复执行某些语句的程序 (第4.2节)。 开发程序 GuessNu

4、mber(第4.2.1节)。 遵循循环设计策略来开发(第4.2.2节)。 开发程序SubtractionQuizLoop (第4.2.3节)。 使用标志值控制循环 (第4.2.3节)。 使用输入重定向而不是从键盘输入以获得大量输入(第4.2.4节)。 使用do-while语句编写循环(第4.3节)。 使用for语句编写循环(第4.4节)。 了解三种类型的循环语句相似处和不同点(第4.5节)。 编写嵌套循环(第4.6)。 学习最小化数值误差的技术(第4.7节)。 从多种多样的例子(GCD、FutureTuition、MonteCarloSimulation)中学习循环(第4.8节)。 使用bre

5、ak和continue实现程序的控制(第4.9节)。 (GUI)使用确认对话框控制循环(第4.10节),6,while 循环流程图,while (循环继续条件) / 循环体;语句(组); ,int count = 0; while (count 100) System.out.println(“Welcome to Java!“);count+; ,7,跟踪while循环,int count = 0; while (count 2) System.out.println(“Welcome to Java!“);count+; ,初始化 count,动 画,8,跟踪while循环(续),int

6、count = 0; while (count 2) System.out.println(“Welcome to Java!“);count+; ,(count 2) 为真,动 画,9,跟踪 while 循环(续),int count = 0; while (count 2) System.out.println(“Welcome to Java!“);count+; ,输出 Welcome to Java,动 画,10,跟踪 while 循环(续),int count = 0; while (count 2) System.out.println(“Welcome to Java!“);c

7、ount+; ,count自增 1 现在count 是1,动 画,11,跟踪while循环(续),int count = 0; while (count 2) System.out.println(“Welcome to Java!“);count+; ,因为count为1 所以(count 2) 依旧为真,动 画,12,跟踪 while 循环(续),int count = 0; while (count 2) System.out.println(“Welcome to Java!“);count+; ,输出 Welcome to Java,动 画,13,跟踪while循环(续),int c

8、ount = 0; while (count 2) System.out.println(“Welcome to Java!“);count+; ,count 自增 1 现在count 是2,动 画,14,跟踪 while 循环(续),int count = 0; while (count 2) System.out.println(“Welcome to Java!“);count+; ,(count 2)为假 因为 count现在是 2,动 画,15,跟踪 while 循环,int count = 0; while (count 2) System.out.println(“Welcome

9、 to Java!“);count+; ,退出循环。 执行循环之后的下一条语句。,动 画,16,问题:猜数字,编写一个程序,随机生成一个在0到100之间,包括0和100的整数。程序提示用户连续输入一个数字,直到它和计算机随机生成的数字相匹配为止。对用户每次输入的数字,这个程序要告诉用户该输入太大了还是太小了,所以这样用户就可以明智地进行下一轮的猜测。下面是一个示例运行:,GuessNumberOneTime,GuessNumber,17,问题:高级数学学习工具,每次运行数学减法学习工具程序只能产生一道题目。你可以使用一个循环重复产生题目。这个示例程序产生了五个问题,在学生回答完所有的五个问题之

10、后报告回答正确的题数。,SubtractionQuizLoop,18,使用标志值结束循环,通常执行循环的次数是不能预先确定的。你可以使用一个输入值来表示循环的结束。这样的值被称为标志值。 编写一个程序来读取和计算不指定个数的整数之和。输入0表示输入结束。,SentinelValue,19,注意,在循环控制中,不要使用浮点值来比较值是否相等。 因为浮点值是某些值的近似值,所以使用它们可能导致不精确的循环次数和不准确的结果。 考虑下面计算1 + 0.9 + 0.8 + 0.1的代码:double item = 1; double sum = 0; while (item != 0) / No gu

11、arantee item will be 0sum += item;item -= 0.1; System.out.println(sum);变量item从1开始,每次执行循环体就减少0.1。当item变为0时循环应该终止。但是,因为浮点运算结果是近似的,所以无法保item会变成真正的0。从表面上看,这个循环似乎没有问题,但它实际上是一个无限循环。,20,do-while循环,do / Loop body;Statement(s); while (loop-continuation-condition);,21,for循环,for (initial-action; loop-continuat

12、ion-condition; action-after-each-iteration) / loop body;Statement(s); ,int i; for (i = 0; i 100; i+) System.out.println(“Welcome to Java!“); ,22,跟踪for循环,int i; for (i = 0; i 2; i+) System.out.println(“Welcome to Java!“); ,声明 i,动 画,23,跟踪for循环(续),int i; for (i = 0; i 2; i+) System.out.println(“Welcome

13、 to Java!“); ,执行初始化 i现在是0,动 画,24,跟踪for循环(续),int i; for (i = 0; i 2; i+) System.out.println( “Welcome to Java!“); ,因为 i 为 0,所以(i 2) 为真,动 画,25,跟踪for循环(续),int i; for (i = 0; i 2; i+) System.out.println(“Welcome to Java!“); ,输出 Welcome to Java,动 画,26,跟踪for循环(续),int i; for (i = 0; i 2; i+) System.out.pri

14、ntln(“Welcome to Java!“); ,执行调整语句, i现在是1,动 画,27,跟踪for循环(续),int i; for (i = 0; i 2; i+) System.out.println(“Welcome to Java!“); ,因为i为1, 所以(i 2) 依旧为真,动 画,28,跟踪for循环(续),int i; for (i = 0; i 2; i+) System.out.println(“Welcome to Java!“); ,输出 Welcome to Java,动 画,29,跟踪for循环(续),int i; for (i = 0; i 2; i+)

15、System.out.println(“Welcome to Java!“); ,执行调整语句, i 现在为 2,动 画,30,跟踪for循环(续),int i; for (i = 0; i 2; i+) System.out.println(“Welcome to Java!“); ,因为i 是2, (i 2) 为假,动 画,31,跟踪for循环(续),int i; for (i = 0; i 2; i+) System.out.println(“Welcome to Java!“); ,退出循环。 循环之后执行这条语句,动 画,32,注意,for循环中的初始动作可以是零个或多个以逗号隔开的

16、语句列表。 for 循环中每次迭代后的动作可以是零个或多个以逗号隔开的语句列表。因此,下面两个for循环是都正确的。 但是它们很少在实际中使用。 for (int i = 1; i 100; System.out.println(i+);for (int i = 0, j = 0; (i + j 10); i+, j+) / Do something ,33,注意,如果省略了for循环中的循环继续条件,则隐含地认为循环继续条件为true。 因此,下面图(a )中给出的语句是正确的,但却是一个无限循环。 最好是使用等价循环(b)以避免混淆:,34,注意,在for子句末尾循环体之前添加分号是一个常

17、见的错误,如下所示:,逻辑错误,for (int i=0; i10; i+); System.out.println(“i is “ + i); ,35,注意(续),同样,下面的循环也是错误的: int i=0; while (i 10); System.out.println(“i is “ + i);i+; 在do循环的环境下,循环结束的分号是必需要的。 int i=0; do System.out.println(“i is “ + i);i+; while (i10);,Logic Error,Correct,36,采用哪种循环?,三种形式的循环语句:while、do-while和fo

18、r在表达的效果上是一样的,也就是说,可以使用三种形式任意之一来编写一个循环。例如:图(a)中的while循环总能转化成图(b)中for循环:,除了在某些特殊情况(参见复习题3.19),下图(a)中的for循环接通常都可以转化成图(b)中while循环:,37,建 议,使用自己觉得最自然、最舒适的那种循环语句。 通常,如果重复的次数是已知的,那就采用for循环,例如,当你需要打印一条信息100次。如果重复的次数是未知的那就采用while循环,例如:读入一些数值直到读入0为止。如果在检查继续条件前必须执行循环体那就用do-while循环替代while循环。,38,嵌套循环,问题:编写一个程序使用嵌

19、套for循环打印一个乘法表。,MultiplicationTable,39,最小化数值误差,涉及浮点数的数值误差是不可避免的。本节通过一个实例讨论如何最小化这样的误差。 下面是一个例子,计算从0.01开始到1.0结束的数列之和。该数列的数值以0.01递增,如下所示:0.01 + 0.02 + 0.03.依此类推。,TestSum,40,问题:求最大公约数,问题:编写一个程序,提示用户输入两个正整数,然后找到它们的最大公约数。 解决方案:假设你输入两个整数4和2,他们的最大公约数是2。假设你输入两个整数16和24,它们的最大公约数是8。所以, 如何求出最大公约数呢? 假设输入的整数是n1和n2。

20、你知道1肯定是一个公约数,但它可能不是最大公约数。所以,可以检测 k(k = 2、3、4依此类推)是否为n1和n2的最大公约数,直到k大于n1或n2。,GreatestCommonDivisor,Run,41,问题:预测未来学费,问题:假设为一个大学今年的学费是10000美元,而且以每年7%的速度增加。多少年后学费会翻倍?,FutureTuition,Run,42,问题:预测未来学费,double tuition = 10000; int year = 1 / Year 1 tuition = tuition * 1.07; year+; / Year 2 tuition = tuition

21、* 1.07; year+; / Year 3 tuition = tuition * 1.07; year+; / Year 4 .,FutureTuition,Run,43,问题:蒙特卡罗模拟,蒙特卡洛模拟是使用随机数和概率来解决问题。 这个方法在计算数学、物理、化学和金融等方面有广泛的应用。 本节给出一个使用蒙特卡罗模拟来估算的例子。,MonteCarloSimulation,Run,circleArea / squareArea = / 4., 可以被近似地认为是4 * numberOfHits / 1000000,44,使用break和continue,使用关键字 break 和 c

22、ontinue 的例子,TestBreak.java,TestContinue.java,TestBreak,TestContinue,45,回顾猜数字问题,这是一个猜数字的程序。你可以使用break语句改写它。,GuessNumberUsingBreak,46,问题:显示素数,问题:编写一个程序,将前50个素数显示在5行中,每行包含10个数。大于1的整数,如果它的正除数只有1和它自身,那么该整数就是素数。例如:2、3、5 和7是素数,但是 4、6、8和9不是素数。 解决方案:该问题可以分解为下面的任务: 针对number= 2、3、4、5、6,、测试它是否为素数。 确定一个给定数是否为素数。

23、 统计素数的个数。 打印每个素数,每行打印10个。,PrimeNumber,Run,47,(GUI)使用确认对话框控制循环,使用确认对话框可以实现一个标志值控制的循环。答案YES或NO决定是否继续或终止该循环。这个循环的模板可能看起来如下所示:,int option = 0; while (option = JOptionPane.YES_OPTION) System.out.println(“continue loop“);option = JOptionPane.showConfirmDialog(null, “Continue?“); ,SentinelValueUsingConfirmationDialog,Run,48,使用IDE工具调试循环,配套网站,补充材料II.C、II.E和II.G。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报