两学期学会Java外文翻译资料

 2022-08-14 15:09:49

英语原文共 719 页,剩余内容已隐藏,支付完成后下载完整资料


两学期学会Java

4循环

在本章结束时,你应该能够:

  1. 解释术语迭代
  2. 用for循环重复一段代码
  3. 用while循环重复一段代码
  4. 用dohellip;hellip;while循环重复一段代码
  5. 为特定任务选择最合适的循环
  6. 用break语句终止循环
  7. 用continue语句跳出一个循环
  8. 解释术语input validation并编写简单的验证程序

4.1介绍

到目前为止,我们已经把“顺序”和“选择”作为程序控制的形式。使用计算机而不是人类来完成任务的好处之一是,他们可以一次又一次地重复这些任务,而不会感到疲倦。有了电脑,我们就不必担心因为疲劳而出现错误,因为人们需要休息,以防在很长一段时间里执行重复任务时变得马虎或粗心大意。在我们的程序中,既不允许顺序也不允许选择来执行这种控制。举个例子,假设一个程序需要在屏幕上显示一个正方形的星号(5*5),如下所示:

可以通过按顺序执行五个输出语句来实现,如下面的一个我们称之为DisplayStars的程序所示:

虽然这会得到预期结果,但程序实际上只包含以下指令来输出一行,但是要重复5次:

多次写出同一行代码有点浪费我们作为程序员的宝贵时间。想象一下如果我们想要一个40*40的正方形会发生什么!

与其把这个指令写五遍,我们更倾向于把它写一遍,让程序把同一行再重复四遍。比如说:

“迭代”是程序控制的一种形式,它允许我们通过重复一段代码来指示计算机多次执行一项任务。因此这种形式的控制通常也被称为重复。用于控制这种重复的编程结构通常被称为循环;我们说循环迭代一定次数。Java中有三种类型的循环:

for循环;

while循环;

dohellip;hellip;while循环。

我们将依次考虑这三种类型。

4.2“for”循环

如果我们希望重复一段代码固定的次数(在上面的例子中是五次),我们将会用到java的for循环。例如下面的程序通过使用for循环重写DisplayStars。看一下,然后我们再讨论:

你可以看到在for循环的头部有三段信息,每段信息之间用一个分号隔开:

这三个信息关联着一个计数器。计数器只是另一个必须创建的变量(通常是整数)。我们用它来追踪到目前为止我们运行循环的次数。在这个例子中,我们称计数器为“i”,但是我们可以给它取任何变量名--通常,选择像“i”和“j”这样简单的名字。

仔细观察for循环是如何工作的。首先计数器被初始化为某个值。我们决定将其初始化为1:

注意到循环计数器i在循环体头部声明并初始化。虽然可以在循环之前声明计数器变量,但是在头部声明计数器变量会限制对循环本身使用这个变量。这样显然更好。

头部的第二段信息是一个测试,非常类似于执行选择时的测试。当测试返回一个布尔值true时,循环重复;当它返回一个布尔值false时,循环结束。在这种情况下计数器用来测试循环次数是否小于或等于5(因为我们希望重复这个循环5次):

因为计数器被设置为1,所以这个测试为真,循环开始。我们有时把循环中的指令称为循环体。和if语句一样,当循环体中只需要一条指令时,for循环的大括号可以省略--但为了清晰起见,我们选择在循环中使用大括号。当循环体开始时,循环大括号中的所有指令都会被执行。在这种情况下,只有一个指令要执行:

这条线在屏幕上输出一排星号。一旦大括号内的指令完成,循环就返回到开头,执行for循环头部的第三段信息i 。第三段信息改变计数器的值,因此最终循环测试将为false。如果我们希望循环重复5次,并且计数器从1开始,我们应该在每次循环时都在计数器上加1:

在第一个递增之后,计数器现在的值是2。一旦计数器已经被改变,测试再次检查,看循环是否需要重复:

这次测试仍然为真,因为计数器仍然不大于5。由于测试为真,循环的主体被再次输入,输出另一行星号。这个测试、循环和改变计数器重复的过程会持续到输出5行星号。此时计数器正常递增:

此时由于计数器大于5,显示测试为false:

当for循环的测试为false时,循环停止。循环内的指令被跳过,程序继续执行此循环后的任何指令。现在你已经看到了一个for循环使用的例子,for循环的一般形式如下:

要做到小心认真,保证循环计数器和测试达到预期的结果。例如,思考以下程序:

你能看出有什么问题吗?

继续循环的条件是计数器大于或等于10(igt;=10)。但是计数器从1开始,所以这个测试马上为false。所以直接全部跳过而根本不会循环!

现在思考这个程序:

你能看出有什么问题吗?

继续循环的条件是计数器大于或等于1(igt;=1)。但是,计数器从1开始,每次增加1,所以这个测试将永远为true,所以当循环开始后它将永远不会停止循环!

然而,只要你小心应对计数器和测试,让for循环重复一定次数非常容易。例如,如果我们在1开始计数器,每次增加1,并且需要执行一些指令70次,我们可以在for循环中执行以下程序:

4.2.1改变循环计数器

DisplayStars2程序演示了使用for循环的常用方法;从1开始计数,每次增加1。但是在构建循环时,你可以以任何值启动计数器,并以任何选择的方式更改计数器。

例如,我们可以重新编写上面程序的for循环,使得计数器从0开始而不是1。在这种情况下,如果我们希望for循环仍然执行指令5次,那么计数器应该到4而不是5:

另一种确保计数器不超过4的方法是保证将计数器保持在5以下。在这种情况下我们需要使用“less than”语句(lt;),而不是“less than or equal to”(lt;=):

我们也可以在每次迭代后改变我们修改计数器的方式。回到原来的for循环,我们每次增加2,而不是1。如果我们仍然希望循环重复5次,我们可以从2开始,并加到10:

最后,计数器可以增加和减少。举例来说,看看下面的程序,它倒序输出从10到1的数字。

计数器从10开始,每次减少1。当计数器的值低于1时,循环就会停止。注意循环体中循环计数器的使用:

这种做法完全可以接受,因为循环计数器只是另一个变量。但是,在执行此操作时,请注意不要随意更改循环体中的循环计数器,因为这可能会使for循环的测试偏离轨道!运行Countdown程序得到以下结果:

4.2.2循环体

循环体循环体可以包含任意数量和类型的指令,包括变量声明、if语句、switch语句,甚至是另一个循环!例如,下面的DisplayEven程序通过在for循环中包含一个if语句修改了我们的Countdown程序,这样可以只显示从10到1的偶数:

可以看到for循环的主体包含一个if语句。If语句的测试检查循环计数器lsquo;irsquo;的当前值是否为偶数:

偶数是当除以2时没有余数,所以我们使用取模运算符(%)来检查。现在只有当它是一个偶数时循环计数器才会显示。运行这个程序会出现显而易见的结果:

在这个例子中,我们在for循环中包含了if语句。也可能是一个for循环包含着另一个循环。当一个循环包含另一个循环时,我们称这些循环为嵌套循环。举例来说,思考下面的程序DisplayStars3,它像以前一样显示一个正方形的星号,但是这次使用了一对嵌套的循环来实现:

可以看到,外部for循环与前面在DisplayStars2中使用的循环相同。而在最初的程序中,我们只有一条指令来显示循环中的一行星号:

在DisplayStars3中,我们用另一个for循环替换了这个指令,后面跟着一个空的输出指令:

需要注意的是,当我们将一个循环放入另一个循环时,我们需要为嵌套循环中的循环计数器取一个新名称。在这种情况下,我们称计数器为“j”。这些声明允许我们显示一行5颗星号,然后移动到新的一行,准备输出下一行。

来看看这个程序中的控件是如何移动的,首先设置外循环计数器为1:

然后检查外循环的程序运行:

这个测试为true,所以外部循环的主体被执行。首先内循环重复五次:

内循环在屏幕上输出一行5个星号,如下所示:

内部循环停止后,还有一条指令需要完成:将光标移动到新的命令行:

这样就完成了外循环的一个循环,然后程序返回到这个循环的开始,并增加一次计数:

然后检查外循环的测试,发现为true,因此整个过程重复,输出一个正方形的五颗星号。

DisplayStars3显示了一个5*5的星号图案。现在观察下一个程序,看看你能不能搞清楚它是干什么的。特别注意内循环的头部:

你可以看到这非常像前一个程序,除了在该程序的内部循环每次显示5个星号。在这种情况下,星号的数量并不固定,而是外循环计数器i的值:

在第一次循环中,当i计数器从1开始时,内循环一行只显示1个星号。第二次循环时,当i计数器递增时,它会显示2颗星,然后是3颗星。最终,当外部i计数器达到5时,它会在最后一次循环时显示5颗星。实际上,这意味着程序将显示一个三角形的星星,如下所示:

4.2.3再次访问循环计数器

在我们继续研究java中的其他类型的循环之前,重要的是要明白,虽然for循环用于固定次数地重复某件事情,但是在写程序时,你并不一定需要知道这个固定次数。例如,这个固定数字可以是程序用户给你的值。这个数字可以用来测试你的循环计数器。下面的程序通过让用户确定星号的平方的大小来修改DisplayStars3。

在这个程序中,你不能从代码中精确地知道循环将会迭代多少次,但是你可以说它们将会迭代num的值的次数--不管用户为num赋值多少。所以在这个意义上,循环仍然是固定的。下面是DisplayStars4例子的运行结果:

下面是另一个例子的运行结果:

4.3while循环

计算机的大部分功能来自于要求它们执行重复性任务的能力,因此迭代是程序控制的一种非常重要的形式。For循环是一个常用的结构,用来实现固定次数的重复。

但是,有时候需要重复的次数并不固定,因此for循环并不是在这种情况下使用的最佳循环。思考下面的场景,例如:

  1. 一个赛车游戏,重复地在轨道上移动一辆车直到车祸;;
  2. 一个发票程序,重复地提供门票出售,直到用户选择退出程序;
  3. 一个密码检查程序,在用户输入正确的密码之前,不允许用户进入应用程序。

上述每种情况都涉及重复,但重复的次数并不固定,而是取决于某种条件。While循环提供了一种非固定迭代。用java构造这个循环的语法如下:

如您所见,这个循环比for循环构造起来要简单得多:由于这个循环没有重复固定的次数,因此不需要创建一个计数器来跟踪重复的次数。那这种循环什么时候有用?我们将研究的第一个示例是使用while循环检查用户输入的数据。检查输入数据中的错误称为输入验证。

例如,回顾一下上一章中的DisplayResult程序显示的结果,它要求用户输入一个考试标记:

输入的分数在0~100之间。当时我们假设用户会正确地输入标记。但是,好的程序员从来不做这样的假设!在接受所输入的标记并进入下一阶段的程序之前,最好检查所输入的标记是否确实有效。如果不是,则允许用户再次输入标记。直到用户输入一个有效标记为止。我们可以用下面的伪代码来表示:

该设计明确指出,每当用户输入无效标记时,就会显示一条错误消息。用户可能多次输入一个无效的标记,因此需要在这里进行迭代。

然而,迭代的次数并不固定,我们因为不可能知道用户将会犯多少错误(如果有的话)。

这听起来就像是while循环能解决的工作了。

下面的程序显示了重写以包含输入验证的所有显示结果。注意它是如何工作的--我们要求用户的标记:如果它是在可接受的范围内,while循环没有执行,我们将它转移给其他指令。但是,如果输入的标记小于零或大于100,我们就会进入循环,显示一个错误消息,并要求用户再次输入标记。这样一直持续,直到标记在要求的范围内。

下面是例子的运行结果:

4.4lsquo;dohellip;hellip;whilersquo;循环

我们需要告诉你的是在Java中还有一种循环,那就是dohellip;hellip;while循环。

Dohellip;hellip;while循环是另一个可变循环结构,但是与while循环不同,dohellip;hellip;while循环在循环结束时而不是开始时进行测试。

Dohellip;hellip;while循环的语法如下:

您可能想知道测试是在循环的结尾还是开始会有什么不同。当然有一个细微的区别。如果测试位于循环的末尾,则循环将至少迭代一次。但是,如果测试位于循环的开始,则条件可能一开始就是false,并且循环永远不会执行。因此while循环执行零次或多次,而dohellip;

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[235395],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。