《java概述课件04循环.ppt》由会员分享,可在线阅读,更多相关《java概述课件04循环.ppt(47页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1第4章循环2引言假如你需要打印一个字符串(例如:WelcometoJava!)100次,就需要把下面的输出语句重复写100遍,这是相当繁琐的:System.out.println(WelcometoJava!);那该如何解决这个问题呢?3引言问题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 t
2、o 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!);问题:100次4引入循环int count=0;while(count 100)System.out.println(Welcome to Java);count+;5学习目标使用while循环编写重复执行某些语句的程序(4.2节)。开发程序GuessNumber和Subtractio
3、nQuizLoop节)。遵循循环设计策略来开发循环节)。开发程序SubtractionQuizLoop节)。使用标志值控制循环(4.2.4节)。使用输入重定向而不是从键盘输入以获取大量输入节)。使用do-while语句编写循环(4.3节)。使用for语句编写循环(4.4节)。了解三种类型循环语句的相似处和不同点(4.5节)。编写嵌套循环(4.6节)。学习最小化数值误差的技术(4.7节)。从多种多样的例子(GCD,FutureTuition,MonteCarloSimulation)中学习循环(4.8节)。使用break和continue来实现程序的控制(4.9节)。(GUI)使用确定对话框控制
4、循环(4.10节)。6while循环流程图while(循环继续条件)/循环体;语句(组);intcount=0;while(count100)System.out.println(WelcometoJava!);count+;7跟踪while循环intcount=0;while(count2)System.out.println(WelcometoJava!);count+;初始化计算8跟踪while循环,续。intcount=0;while(count2)System.out.println(WelcometoJava!);count+;(count2)为真9跟踪while循环,续。intc
5、ount=0;while(count2)System.out.println(WelcometoJava!);count+;输出WelcometoJava10跟踪while循环,续。intcount=0;while(count2)System.out.println(WelcometoJava!);count+;count增加1count现在为111跟踪while循环,续。intcount=0;while(count2)System.out.println(WelcometoJava!);count+;(count2)当count为1,仍然为真。12跟踪while循环,续。intcount=0
6、;while(count2)System.out.println(WelcometoJava!);count+;输出WelcometoJava13跟踪while循环,续。intcount=0;while(count2)System.out.println(WelcometoJava!);count+;count增加1count现在为214跟踪while循环,续。intcount=0;while(count2)System.out.println(WelcometoJava!);count+;(count2)当count为2时,为假15跟踪while循环intcount=0;while(coun
7、t2)System.out.println(WelcometoJava!);count+;退出循环,执行下一个语句16问题:GuessNumber编写一个程序,随机产生一个0到100之间且包含0和100的整数。程序提示用户连续输入一个数字,直到它和计算机随机产生的数字相匹配为止。对用户每次输入的数字,程序都要告诉用户该输入值是太大了,还是太小了,这样用户可以明智地进行下一轮的猜测。下面是一个运行示例:GuessNumberOneTimeGuessNumber17问题:高级数学学习工具数学减法学习工具的程序只能产生一道题目。我们可以使用一个循环反复生成题目。这个例子给出了一个程序,可以产生5道问
8、题,在学生回答完所有5个问题后,报告回答正确的题数。SubtractionQuizLoop18用一个标志值结束循环通常一个循环执行的次数不是预先确定的。你可以使用一个输入值来表示循环的结束。这样的值称为标志值。编写一个程序,读取和计算个数不确定的整数的总和。输入0表示输入结束。SentinelValue19注意在循环控制中,不要使用浮点值来比较值是否相等。因为浮点值都是某些值的近似值,使用它们可能导致不精确的循环次数和不准确的结果。考虑计算1+0.9+0.8+.+0.1:doubleitem=1;doublesum=0;while(item!=0)/Noguaranteeitemwillbe0
9、sum+=item;item-=0.1;System.out.println(sum);变量itm从1开始,每执行一次循环体就减去0.1。当item变为0时循环应该终止。但是,因为浮点数在算术上是近似的,所以不能确保item会变成真正的0。从表面上看,这个循环似乎没问题,但实际上它是一个无限循环。20do-while循环do /循环体;语句(组);while(循环继续条件);21for循环for(初始操作;循环继续条件;每次迭代后的操作)/循环体;语句(组);inti;for(i=0;i100;i+)System.out.println(WelcometoJava!);22跟踪for循环int
10、i;for(i=0;i2;i+)System.out.println(WelcometoJava!);声明i动画23跟踪for循环,续。inti;for(i=0;i2;i+)System.out.println(WelcometoJava!);执行初始化i=0动画24跟踪for循环,续。inti;for(i=0;i2;i+)System.out.println(WelcometoJava!);(i2)当i=0时为真动画25跟踪for循环,续。inti;for(i=0;i2;i+)System.out.println(WelcometoJava!);输出WelcometoJava动画26跟踪fo
11、r循环,续。inti;for(i=0;i2;i+)System.out.println(WelcometoJava!);执行操作语句i=1动画27跟踪for循环,续。inti;for(i=0;i2;i+)System.out.println(WelcometoJava!);(i2)当i=1时,仍为真动画28跟踪for循环,续。inti;for(i=0;i2;i+)System.out.println(WelcometoJava!);输出WelcometoJava动画29跟踪for循环,续。inti;for(i=0;i2;i+)System.out.println(WelcometoJava!)
12、;执行操作语句i=2动画30跟踪for循环,续。inti;for(i=0;i2;i+)System.out.println(WelcometoJava!);(i2)当i=2时,为假动画31TraceforLoop,cont.inti;for(i=0;i2;i+)System.out.println(WelcometoJava!);退出循环,执行下一个语句。animation32注意for循环中的初始动作可以是0个或是多个以逗号隔开的变量声明语句或赋值表达式。for循环中每次迭代后的动作可以是0个或多个以逗号隔开的语句。因此,下面两个for循环是正确的。然而,他们是在实践中很少使用。for(in
13、ti=1;i100;System.out.println(i+);for(inti=0,j=0;(i+j10);i+,j+)/Dosomething 33注意如果省略for循环中的循环继续条件,则隐含地认为循环继续条件为true。因此,下面的语句(一个),这是一个无限循环,是正确的。不过,最好是使用(b)中的等效循环避免混淆:34注意在for子句的末尾和循环体之间多写分号是一个常见的错误,如下所示:错误for(int i=0;i10;i+);System.out.println(i is +i);35注意,续同样,下面的循环也是错误的:inti=0;while(i10);System.out.
14、println(iis+i);i+;在do-while循环中,需要分号来结束这个循环。inti=0;doSystem.out.println(iis+i);i+;while(i10);错误正确36采用哪种循环三种形式的循环语句:while、do-while和for,在表达式上是等价的。也就是说,可以使用这三种形式之一来编写一个循环。例如,下面图a中的while循环总能转化为图b中的for循环:除了某些特殊情况外,下面图a中的for循环通常都能转化为图b中的while循环:37建议使用自己觉得最自然、最舒服的一中循环语句。通常,如果已经提前知道重复次数,那就采用for循环,例如,需要打印一条信息
15、100次时;如果无法确定重复次数,就采用while循环,就像读入一些数值直到读入0为止的这种情况;如果在检验继续条件前需要执行循环体,就用do-while循环替代while循环。38嵌套循环问题:使用嵌套for循环打印一个乘法表的程序。MultiplicationTable39最小化数值误差涉及浮点数的数值误差是不可避免的。本节将通过实例讨论如何最小化这种误差。下面是一个例子,计算从0.01到1.0的数列之和,该数列中的数值以0.01递增,如下所示:0.01+0.02+0.03+。TestSum40问题:求最大公约数问题:编写一个程序,提示用户输入两个正整数,求它们的最大公约数。解决方案:两个
16、整数4和2的最大公约数是2。两个整数16和24的最大公约数是8。那么,如何求最大公约数的呢?设输入的两个整数为n1和n2。已知1是一个公约数,但它不可能是最大的公约数。所以可以检查k(k=2、3、4,)是否为n1和n2的最大公约数,直到k大于n1或n2。GreatestCommonDivisorRun41问题:预测未来学费问题:假设某个大学今年的学费是10000美金,而且以每年7%的速度增加。多少年之后学费会翻倍?FutureTuitionRun42问题:预测未来学费doubletuition=10000;intyear=1/Year1tuition=tuition*1.07;year+;/Y
17、ear2tuition=tuition*1.07;year+;/Year3tuition=tuition*1.07;year+;/Year4.FutureTuitionRun43问题:蒙特卡罗模拟蒙特卡罗模拟使用随机数和概率来解决问题。这个方法在计算数学、物理、化学和财经方面有很广泛的应用。本节给出使用蒙特卡罗模拟来估算。MonteCarloSimulationRun圆面积/正方形面积=/4。可以近似为4*numberOfHits/1000000.44使用break和continue使用关键字break和continue的例子:TestBreak.javaTestContinue.javaTe
18、stBreakTestContinue45猜数字问题续这是一个猜数字程序,你可以使用break语句改写它。GuessNumberUsingBreak46问题:显示素数问题:大于1的整数,如果它的正因子只有1和它自身,那么该整数就是素数。例如:2、3、5、7都是素数,而4、6、8、9不是。编写一程序,在5行中显示前50个素数,每行包含10个数。解决方案:该问题可分解成以下任务:1.针对number=2,3,4,5,6,测试它是否为素数。2.判断一个给定数是否是素数。3.统计素数的个数。4.打印每个素数,每行打印10个。PrimeNumberRun47(GUI)使用确认对话框控制循环使用确认对话框可以实现一个标志值控制的循环,答案Yes或者No决定是否继续循环还是终止这个循。这个循环的模板可能看起来如下所示:intoption=0;while(option=JOptionPane.YES_OPTION)System.out.println(continueloop);option=JOptionPane.showConfirmDialog(null,Continue?);SentinelValueUsingConfirmationDialogRun