目录
第1章 成为程序员 1.1 选择编程语言 1.2 告诉计算机做什么 1.3 程序的工作原理 1.4 为什么程序不能正常工作 1.5 选择 Java编程工具 1.6 安装 Java开发工具 1.7 总结 1.8 问与答 1.9 测验 1.9.1 问题 1.9.2 答案 1.10 练习 第2章 编写第一个程序 2.1 编写程序所需的工具 2.2 创建 Saluton 程序 2.3 开始输入程序 2.3.1 class语句 2.3.2 main语句的作用 2.3.3 大括号 2.4 在变量中存储信息 2.5 保存编写好的程序 2.6 将程序编译为 class文件 2.7 修复错误 2.8 运行 Java程序 2.9 总结 2.10 问与答 2.11 测验 2.11.1 问题 2.11.2 答案 2.12 练习 第3章 Java之旅 3.1 第一站:Oracle 3.2 去 Java学校 3.3 在 JavaWorld 用午餐 3.4 在 NASA仰望天穹 3.5 回归正题 3.6 到 Java Boutique 去问路 3.7 在手机上运行 Java 3.8 总结 3.9 问与答 3.10 测验 3.10.1 问题 3.10.2 答案 3.11 练习 第4章 理解Java程序的工作原理 4.1 创建应用程序 4.2 向应用程序传递参数 4.3 创建 applet 4.4 总结 4.5 问与答 4.6 测验 4.6.1 问题 4.6.2 答案 4.7 练习 第5章 在程序中存储和修改信息 5.1 语句和表达式 5.2 指定变量类型 5.2.1 整数和浮点数 5.2.2 字符和字符串 5.2.3 其他数值类型的变量 5.2.4 布尔型变量 5.3 给变量命名 5.4 在变量中存储信息 5.5 运算符 5.5.1 变量的递增与递减 5.5.2 运算符优先级 5.6 使用表达式 5.7 总结 5.8 问与答 5.9 测验 5.9.1 问题 5.9.2 答案 5.10 练习 第6章 使用字符串来交流 6.1 在字符串中存储文本 6.2 在程序中显示字符串 6.3 在字符串中使用特殊字符 6.4 拼接字符串 6.5 将其他变量用于字符串中 6.6 字符串的高级处理 6.6.1 比较两个字符串 6.6.2 确定字符串的长度 6.6.3 改变字符串的大小写 6.6.4 查找字符串 6.7 导演及演员名单 6.8 总结 6.9 问与答 6.10 测验 6.10.1 问题 6.10.2 答案 6.11 练习 第7章 使用条件测试进行判断 7.1 if语句 7.1.1 小于和大于的比较 7.1.2 相等和不等 7.1.3 使用块语句组织程序 7.2 if-else 语句 7.3 switch语句 7.4 条件运算符 7.5 观察时钟 7.6 总结 7.7 问与答 7.8 测验 7.8.1 问题 7.8.2 答案 7.9 练习 第8章 使用循环重复执行操作 8.1 for循环 8.2 while 循环 8.3 do-while 循环 8.4 退出循环 8.5 给循环命名 8.6 测试计算机的运行速度 8.7 总结 8.8 问与答 8.9 测验 8.9.1 问题 8.9.2 答案 8.10 练习 第9章 使用数组存储信息 9.1 创建数组 9.2 使用数组 9.3 多维数组 9.4 对数组进行排序 9.5 对字符串中的字符计数 9.6 总结 9.7 问与答 9.8 测验 9.8.1 问题 9.8.2 答案 9.9 练习 第10章 创建第一个对象 10.1 面向对象编程的工作原理 10.2 对象示例 10.3 什么是对象 10.4 理解继承 10.5 建立继承层次 10.6 转换对象和简单变量 10.6.1 简单变量的类型转换 10.6.2 对象类型转换 10.6.3 在简单变量和对象之间进行转换 10.6.4 自动封装和拆封 10.7 创建对象 10.8 总结 10.9 问与答 10.10 测验 10.10.1 问题 10.10.2 答案 10.11 练习 第11章 描述对象 11.1 创建变量 11.2 创建类变量 11.3 用方法来创建行为 11.3.1 声明方法 11.3.2 参数不同的类似方法 11.3.3 构造函数 11.3.4 类方法 11.3.5 方法中变量的作用域 11.4 将一个类放在另一个类中 11.5 使用关键字this 11.6 使用类方法和类变量 11.7 总结 11.8 问与答 11.9 测验 11.9.1 问题 11.9.2 答案 11.10 练习 第12章 充分利用现有对象 12.1 继承的威力 12.1.1 继承行为和属性 12.1.2 覆盖方法 12.2 建立继承 12.3 使用现有的对象 12.4 将相同类型的对象存储到 Vector 中 12.5 创建子类 12.6 总结 12.7 问与答 12.8 测验 12.8.1 问题 12.8.2 答案 12.9 练习 第13章 创建简单的用户界面 13.1 Swing 和抽象窗口工具包 13.2 使用组件 13.2.1 窗口和框架 13.2.2 按钮 13.2.3 标签和文本框 13.2.4 复选框 13.2.5 组合框 13.2.6 文本区域 13.2.7 面板 13.3 创建自己的组件 13.4 总结 13.5 问与答 13.6 测验 13.6.1 问题 13.6.2 答案 13.7 练习 第14章 用户界面的布局 14.1 使用布局管理器 14.1.1 GridLayout管理器 14.1.2 BorderLayout管理器 14.1.3 BoxLayout管理器 14.1.4 使用Insets将组件隔开 14.2 应用程序的界面布局 14.3 总结 14.4 问与答 14.5 测验 14.5.1 问题 14.5.2 答案 14.6 练习 第15章 响应用户输入 15.1 让程序监听 15.2 设置要监听的组件 15.3 处理用户事件 15.3.1 复选框和组合框事件 15.3.2 键盘事件 15.3.3 启用和禁用组件 15.4 完善图形应用程序 15.5 总结 15.6 问与答 15.7 测验 15.7.1 问题 15.7.2 答案 15.8 练习 第16章 创建复杂的用户界面 16.1 滚动窗格 16.2 滑块 16.3 变更监听器 16.4 使用图像图标和工具栏 16.5 总结 16.6 问与答 16.7 测验 16.7.1 问题 16.7.2 答案 16.8 练习 第17章 创建交互式Web程序 17.1 标准applet方法 17.1.1 在applet窗口中绘画 17.1.2 初始化applet 17.1.3 启动和停止applet 17.1.4 销毁applet 17.2 将applet放到Web页面中 17.3 创建applet 17.3.1 在applet窗口中绘画 17.3.2 测试SalutonApplet程序 17.4 从Web页面传递参数 17.5 在applet中接收参数 17.6 在applet中处理参数 17.7 使用object标记 17.8 总结 17.9 问与答 17.10 测验 17.10.1 问题 17.10.2 答案 17.11 练习 第18章 处理程序中的错误 18.1 异常 18.1.1 在try-catch块中捕获异常 18.1.2 捕获多种不同的异常 18.1.3 出现异常后进行处理 18.1.4 抛出异常 18.1.5 忽略异常 18.2 抛出和捕获异常 18.3 总结 18.4 问与答 18.5 测验 18.5.1 问题 18.5.2 答案 18.6 练习 第19章 创建线程程序 19.1 线程 19.1.1 降低程序的速度 19.1.2 创建线程 19.2 使用线程 19.2.1 声明类 19.2.2 创建变量 19.3 从init( )开始 19.4 在创建URL时捕获错误 19.5 在paint( )方法中处理屏幕更新 19.6 启动线程 19.6.1 运行线程 19.6.2 停止线程 19.7 处理鼠标单击 19.8 循环显示链接 19.9 总结 19.10 问与答 19.11 测验 19.11.1 问题 19.11.2 答案 19.12 练习 第20章 读写文件 20.1 流 20.1.1 文件 20.1.2 从流中读取数据 20.1.3 缓冲输入流 20.2 将数据写入流中 20.3 读写配置属性 20.4 总结 20.5 问与答 20.6 测验 20.6.1 问题 20.6.2 答案 20.7 练习 第21章 读写XML数据 21.1 创建XML文件 21.2 读取XML文件 21.3 读取 RSS 聚合内容(Syndication Feeds) 21.4 总结 21.5 问与答 21.6 测验 21.6.1 问题 21.6.2 答案 21.7 练习 第22章 利用JAX-WS开发Web服务 22.1 定义服务端点接口 使用注解来简化Java代码 22.2 创建服务实现Bean 22.3 发布Web服务 22.4 使用Web服务描述语言文件 22.5 创建Web服务客户端 22.6 总结 22.7 问与答 22.8 测验 22.8.1 问题 22.8.2 答案 22.9 练习 第23章 创建Java2D图形 23.1 使用Font类 23.2 使用Color类 23.3 创建自定义颜色 23.4 绘制直线和形状 23.4.1 绘制直线 23.4.2 绘制矩形 23.4.3 绘制椭圆和圆 23.4.4 绘制弧线 23.5 绘制饼图 23.6 总结 23.7 问与答 23.8 测验 23.8.1 问题 23.8.2 答案 23.9 练习 第24章 编写Android app 24.1 Android简介 24.2 创建 Android app 24.2.1 剖析一个Android新项目 24.2.2 创建app 24.2.3 安装Android模拟器 24.2.4 创建调试配置 24.3 运行app 24.4 设计真实的app 24.4.1 组织资源 24.4.2 配置app的Manifest文件 24.4.3 设计用户界面 24.4.4 编写Java代码 24.5 总结 24.6 问与答 24.7 测验 24.7.1 问题 24.7.2 答案 24.8 练习 附录A 使用NetBeans IDE A.1 安装NetBeans A.2 创建新项目 A.3 创建新的Java类 A.4 运行应用程序 A.5 修复错误 附录B Java资源 B.1 可以考虑的其他书 B.2 Oracle公司的 Java官方站点 B.3 其他Java站点 B.3.1 本书英文版的配套网站 B.3.2 Café au Lait B.3.3 Workbench B.3.4 Java 7 Developer Blog B.3.5 其他Java博客 B.3.6 InformIT B.3.7 Stack Overflow B.3.8 Java Review Service B.3.9 JavaWorld杂志 B.3.10 Developer.com’s Java Directory 附录C 本书站点 附录D 设置Android开发环境 D.1 起步 D.2 安装Eclipse D.3 安装 Android SDK D.4 安装在Eclipse中使用的Android插件 D.5 设置你的手机 其他 版权

Java初级教程

Java入门经典
第8章 使用循环重复执行操作

本章介绍如下内容:

使用for循环;

使用while循环;

使用do-while循环;

提早退出循环;

为循环命名。

对学生来说,最讨厌的惩罚是在纸上或黑板上一遍又一遍地写东西。在电影 The Simpsons (辛普森一家)中,Bart Simpson 得经常到黑板上写“The art teacher is fat, not pregnant”,这种惩罚对孩子也许有效,但对计算机肯定不管用,因为计算机可以轻松地重复一项任务。

计算机程序最适合重复地做相同的事情,因为有循环。循环是在程序中重复执行一条语句或一组语句。有些循环执行固定的次数,有些循环则可以无限期的执行。

Java中有3种循环语句:for、do和while。这3个循环语句的工作方式相似,但是了解其各自的工作机制仍然大有裨益。通过选择合适的循环语句,可以简化程序的循环部分。

8.1 for循环

在编程时,你会发现循环可以在多种情况下使用。你可以使用循环重复做某些事情很多次,例如防病毒程序打开每封邮件时检查是否有病毒。也可以使用循环让计算机在某一个简短的周内内什么都不做,比如每隔一分钟显示一次当前时间的动态时钟。

循环语句让计算机程序多次返回到同一个地方,就像飞机特技在空中表演转圈时那样。

Java 中最复杂的循环语句是 for。for 循环经常用于重复执行程序某部分特定次数。下面是一个例子:

这个循环显示0~999之间可被12整除的数字。

每个 for 循环都使用一个变量来确定循环何时开始、何时结束。这个变量通常称为计数器,在上述循环中计数器为变量dex。

这个示例演示了for语句的3部分。

初始化部分:在第一部分,变量dex被赋予初始值0。

条件部分:在第二部分,有类似于if语句中的条件测试,这里的测试为dex<1000。

修改部分:第三部分是一条语句,它使用递增运算符修改变量dex的值。

在初始化部分,可以设置计数器变量,也可以在 for 语句中创建该变量,就像上例中的整型变量 dex 那样。当然也可以在程序的其他地方创建该变量。不管是哪种情况,在 for 语句的这部分都必须给该变量赋初值。循环开始时,变量应该就具备了初始值。

条件部分包含测试,要继续循环,该测试的结果必须为true。一旦测试结果为false,循环将结束。在这个例子中,当变量dex的值大于或等于1000时,循环将结束。

for 语句的最后一部分包含一条修改计数器变量值的语句。每次循环时,这条语句都将执行。计数器变量必须以某种方式改变其值,否则循环永远都不会结束。例如,在这个例子中,在修改部分,使用运算符++将变量dex的值加1。如果变量dex的值不变,它将始终为初始值0,这样条件dex<1000将永远为true。

for语句中的语句块在每次循环时也都被执行。

在上述例子中,for语句中的语句块如下:

这条语句将执行1000次。该循环首先将变量dex设置为0,然后每次循环时将变量dex的值加1,当变量dex的值大于或等于1000时循环结束。

注意:

一个与循环相关的不常见的术语是迭代,指的是执行单词循环,用于控制循环的计数器变量就是迭代。

在 if语句中已经看到,如果 for循环只包含一条语句,可以不使用大括号,如下例所示:

这个循环显示文本“I will not sell miracle cures”500 次。虽然循环只有一条语句时可以不使用大括号,但为使程序易于理解,也可以使用括号。

本章创建的第一个程序显示1~200的整数与9的乘积:即9×1、9×2、9×3等,直到9×200。在NetBeans中,创建一个新的Java空文件,并命名为Nines,然后输入程序清单8.1中的文本。当对文件进行保存时,将存储为Nines.java。

打开字处理器并新建一个文件,输入程序清单 8.1 所示的内容。输入完成后,将文件保存为Nines.java。

程序清单8.1 Nines.java程序

程序Nines的第3行包含一条for语句,该语句有3部分。

初始化部分 int dex=1:它创建一个整型变量 dex,并将其初始值设置为 1。

条件部分 dex <= 200:它必须为真才执行循环,否则将结束循环。

修改部分 dex ++:在每次循环中将变量 dex 的值加 1。

在 NetBeans中选择命令菜单 Run->Run File,运行该程序,将产生如下输出:

Output

由于NetBeans中的输出窗口不会对文本换行,所有所有的数字将在一行中显示。为了使文本能够换行,右键单击输出面板,然后从弹出的菜单中选择“Wrap text”。

8.2 while 循环

while循环不像for循环那样有多个不同的组成部分,它所所要的只是一个条件测试,由while语句来完成。下面是一个while循环语句的例子:

该循环将不断重复,直到变量gameLives小于等于0。

while语句在循环一开始,即执行循环中的任何语句之前,就测试条件。因此,如果程序首次运行到while语句时,测试条件为false,循环体中的语句将根本不会执行。

如果while条件为true,将执行循环一次,然后再测试while条件。如果在循环体内不改变测试条件,循环将无休止地执行下去。

下面的语句使用while循环显示同一行文本多次:

while 循环会在循环语句之前设置的一个或多个变量。在这个例子中,创建了两个整型变量:limit和count,其中limit的值为5,count的值为1。

该 while 循环显示文本“Pork is not a verb”4 次,如果将变量 count 的初始值改为 6,将不会显示这行文本。

8.3 do-while 循环

do-while 循环的功能类似于 while 循环,但测试条件的位置不同,下面是一个 do-while循环的例子:

与前面的while循环类似,该循环不断执行,直到变量gameLives不再大于0。do-while循环的不同之处在于,条件测试是在循环体语句之后而不是之前执行的。

当程序首次运行到do循环时,do和while之间的语句被自动执行,然后再测试while条件以决定循环是否继续循环。如果while条件为true,循环将再次执行;如果while条件为false,循环结束。在 do 和 while 语句之间,必须有改变条件的语句,否则循环将一直进行下去。do-while循环体内的语句至少会执行一次。

下列语句使用do-while循环显示相同的文本行多次:

与while循环类似,do-while循环会在循环语句之前使用已经设置的一个或多个变量。

该循环显示文本“I will not Xerox my butt”4 次。如果将变量 count 的初始值设置为 6,尽管count大于limit,文本仍将显示1次。

在do-while循环中,即使循环条件为false,循环体内的语句也会被执行一次。

8.4 退出循环

退出循环的正常途径是测试条件为false,3种类型的Java循环(for、while和do-while)都是如此。然而有时可能想立即结束循环,即使此时测试条件为 true,为此可以使用 break语句,如下面的代码所示:

break语句将结束包含该语句的循环体。

在本例中,只有当index变量大于1000时,while循环体才停止执行。然而,可以使用一个特殊的语句提前终止循环的执行:如果index等于400,将执行break语句,从而立即结束循环。

另外一个可在循环中使用的特殊语句是 continue,它导致退出当前循环,并进入下一次循环,请看下面的循环:

在该循环中,如果变量index的值不等于400,语句将正常执行。在本例中,continue语句会令循环从while语句开始执行,而不是执行System.out.println()语句。由于continue语句的存在,循环从来不会显示下面的文本:

在3种循环中,都可以使用break和continue语句。

使用break语句可以在程序中创建一个永远运行的循环,如下例所示:

8.5 给循环命名

与Java程序中的其他语句类似,可将一个循环放在另一个循环中。下面的示例将一个for循环放在一个while循环中:

在这个例子中,如果变量points大于50,break语句将导致退出for循环。然而while循环永远不会结束。因为变量target永远不会大于100。

在有些情况下,你可能想退出两个循环。为此,需要给外层循环(这里是 while 循环)命名。要给循环命名,将名称放在循环起始位置的前一行,并在名称后加冒号(:)。

循环有名称后,就可以在break或continue语句中使用名称来指出它们将作用于哪个循环。下面的例子与前一个例子相同,但有一点不同:如果变量points大于50,将结束两个循环:

当在break语或continue语句中使用循环名称时,不要加上名称后面的冒号。

复杂的for循环

for循环可以相当复杂,可以在初始化部分、条件测试部分,以及循环体部分有多个变量。for循环的各个部分可以使用分号(;)进行隔离,而且在初始化部分可以设置多个变量,循环体中也可以有多条语句,如下面的例子所示。

在 for 循环的同一个部分中,变量之间用逗号隔开,如 i=0,j=0。这个循环要显示一系列i乘以j的等式。在每次循环中,变量i加1,变量j加2。一旦i与j的乘积大于等于1000,循环将结束。

for循环的组成部分也可为空,一个这样的例子是,在程序的其他地方已经创建计数器变量并设置了其初始值,如下例所示:

8.6 测试计算机的运行速度

这里将会用到一个运行计算机标准检查程序(Benchmark)的Java程序,它可以测试计算机的软件或硬件的运行速度。Benchmark程序使用循环语句来重复执行下面的数学表达式:

该语句调用 Math.sqrt( )方法来查找数值的平方根。第 11 章将会讲解该方法的工作机制。

这里创建的Benchmark程序可以查看计算机在一分钟之内计算平方根的次数。

在NetBeans中创建一个新的Java空文件,然后命名为Benchmark。输入程序清单8.2中的文本,然后保存文件。

程序清单8.2 Benchmark.java的完整源代码

该程序在运行时将会进行如下操作。

第1~2行:声明Benchmark类,开始程序的main()块。

第3行:创建变量startTime,并用当前时间(毫秒)为其赋初始值。该初始值可以使用Java的System类中的currentTimeMillis()方法来获取。

第4行:创建endTime变量,其初始值为startTime加60000。由于1分钟等于60000毫秒,因此endTime与startTime正好间隔1分钟。

第5行:创建一个长整型变量index,且其初始值为0。

第6行:while语句使用true作为测试条件,开始循环。由于测试条件始终为true,因此循环将一直运行(也就是说,只有其他事情将其终止时,才停止循环)。

第7行:计算index的平方根,然后将其存储到x变量中。

第8行:创建变量now,并使用currentTimeMillis()方法将当前时间赋值给它。

第 9~11 行:如果 now大于 endTime,这表明循环已经运行了 1 分钟,此时 break语句会结束while循环。反之,继续执行循环。

第12行:每循环一次,index变量加1。

第14行:程序在循环体外显示它进行平方根计算的次数。

图8.1所示为该程序的输出结果。

图8.1 Bencnmark 程序的输出

Benchmark 程序非常适合用于测试读者的计算机是否比我的快。在测试时,我的计算机总共执行了45亿次计算,如果你的机器的执行次数比这个值要高,不要只是安慰我,多买点我的书,这样我好对自己的计算机进行升级。

8.7 总结

循环是大多数编程语言的基础。通过循环语句对将要显示的图形依次进行控制,即可创建动画效果。如果没有循环,则在Java以及其他编程语言中都无法完成这样的任务。

8.8 问与答

问:本章在多个地方都使用了术语“初始化”,这是什么意思?

答:意思是给变量设置初始值。创建一个变量并将一个字符串赋给它时,你就是在对变量进行初始化。

问:如果循环永不结束,如何让程序停止运行?

答:在程序中,如果有循环永不结束,通常采用其他方式使其停止。例如,在游戏中,循环可能不断运行,直到玩家丧失性命为止。

编写程序时一种常见的bug是无限循环:由于编程错误,循环永不停止。如果运行Java程序时发生了无限循环错误,可以按下输出面板中左侧出现的红色警告图标。

8.9 测验

下列问题用于测试读者对循环的理解程度。为贯彻该主题的精神,不断回答这些问题,直到充分理解为止。

8.9.1 问题

1.应使用什么分隔开for语句的各个部分?

a.逗号。

b.分号。

c.不当班的警察。

2.哪条语句导致程序回到循环的开头,并从那里继续运行?

a.conitnue。

b.next。

c.skip。

3.Java中的哪一个循环语句至少可以运行一次?

a.for。

b.while。

c.do-while。

8.9.2 答案

1.b.逗号用于分隔同一部分内的内容,而分号用于分隔不同的部分。

2.a.break语句用于彻底结束循环,而continue语句用于进入下一轮循环。

3.c.只有在执行过一次循之后,才测试do-while语句中的条件。

8.10 练习

如果学习有关循环的知识后,你的头脑还清醒,请完成下面的练习以复习本章的主题:

修改Benchmark程序,对乘法或除法这些简单数学运算的执行进行测试。

使用循环编写一个小程序,找出前400个能被13整除的数。

有关为完成这些练习而编写的Java程序,请访问本书的配套网站www.java24hours.com。

没有精选讨论主题。

全部讨论主题 查看精选主题

没有讨论主题。
😃 😅 😆 😁 😂 😊 😄 😠 😩 😲 😞 😵 😰 😒 😍 😤 😜 😝 😋 😘 😚 😷 😳 😢 😭 😨 😣 😡 😌 😖 😔 😱 😪 😏 😓 😥 😫 😉 👊 👍 👆 👇 👈 👉 👋 👏 👌 👎 👐 💓 💔 💕 💖 💗 💘 💙 💚 💛 💜 💝 💞 💟