《Java 7程序设计入门经典》一3.8 for循环中的一些特殊情况

3.8 for循环中的一些特殊情况

因为for循环有很多变化,所以for循环是Java语言中用处最多的语句。一个最常见的用法是有多个循环控制变量。在使用多个循环控制变量时,每个表达式的初始化表达式和迭代表达式用逗号分隔。下面是一个简单的例子:

程序输出如下所示:

注意,逗号将两个初始化表达式和迭代表达式分开的方式。当循环开始时,在循环的初始化部分初始化变量i和变量j。每次循环开始时,递增变量i,递减变量j。当i大于等于j时结束循环。理论上,可以有任意数量的循环控制变量,但实际上,两三个循环控制变量就会让for循环很难看。
for循环的另一种常见变化与循环控制条件的本质有关。这种情况不需要引入循环控制变量。条件语句可以是任意有效的boolean表达式。在下面的例子中,循环一直执行,直到用户在键盘敲击字母S:

3.8.1 缺少部分

通过对循环定义的部分片段留空,可以为for循环创造许多有趣的变化。在Java中,for循环的初始化部分、条件部分或迭代部分中的任何一个或全部都可能为空。例如,考虑下面程序:

这里,for循环的迭代表达式为空。但是,循环控制变量i在循环体内部递增。这意味着,每次循环时只检查变量i是否等于10,不再进行其他操作。但是,由于变量i在循环主体内部增加,因此循环正常运行,显示以下输出:

在下一个例子中,for循环的初始化部分也移除了。

在这个版本中,变量i在循环开始前初始化,而不是作为for循环的一部分。一般情况下,会在for的内部初始化循环控制变量。通常,只有在初始值不是由for语句内部的过程得到的情况下,才将初始化语句放在循环外面。

3.8.2 无限循环

通过将for循环的条件表达式留空,可以创建无限循环(infinite loop)。这是一个永不终止的循环。例如,很多Java程序员用下面的代码段创建无限循环:

循环将永远运行下去。尽管一些编程任务(如操作系统的命令进程)需要无限循环,但是绝大多数的“无限循环”仅仅是包括特殊终止语句的循环。在本章末将会看到如何停止这类循环。(提示:使用break语句终止循环。)

3.8.3 没有循环体的循环

在Java中,for循环(或其他循环)的循环体可以留空。这是因为,从语法上看,空语句(null statement)是有效的。没有循环体的循环经常很有用。例如,下面程序就用了一个没有循环体的循环来计算1~5之间整数的和:

注意,累加过程在for循环内执行,不需要循环体。请特别关注迭代表达式:

不要畏惧这样的语句。它们在专业的Java程序中经常遇到。如果将它们分为多个部分,就很容易理解了。简言之,这个语句就是将sum的结果加上i再赋给sum,然后将变量i递增1。所以,该语句与以下语句相同:

时间: 2024-11-02 21:30:48

《Java 7程序设计入门经典》一3.8 for循环中的一些特殊情况的相关文章

《Java 7程序设计入门经典》一导读

前 言 本书通过Java语言来讲解编程的基础知识.该书假设读者之前没有任何编程经验.本书首先介绍最基本的知识,例如,如何编译和运行Java程序:接着,讨论关键字.运算符和一些形成Java语言的构造.本书还会涉及Java的应用编程接口(Application Programming Interface,API)库.其中,包括Swing框架,它可以用来创建具有图形用户界面(Graphical User Interface,GUI)的程序.还包括集合框架,它可以用来存储对象集合.简而言之,本书旨在对J

《Java 7程序设计入门经典》一3.17 习题

3.17 习题 1.写一个程序,从键盘读入字符,直到接收到一个英文句号(.).程序需要计算输入的空格的个数.在程序结束时输出总结果. 2.请写出if-else-if梯队的一般形式. 3.针对下列程序 其中最后的else子句与哪个if配对? 4.写一个for循环语句,从1000计数到0,步进值为-2. 5.下面的代码片段是否有效? 6.请解释break语句的用途(包括其两种形式.) 7.在下面的代码片段中,break语句执行后会显示什么? 8.下面程序片段的输出是什么? 9.for循环中的迭代表达

《Java 7程序设计入门经典》一3.14 像使用goto语句一样使用break语句

3.14 像使用goto语句一样使用break语句 除了用于switch语句和循环外,break语句也可以用提供像goto语句一样的用法.由于goto语句是一种改变程序流的非结构化方法,因此Java并没有goto语句.使用了很多goto语句的程序一般难以理解和维护.但是,有一些使用goto语句的地方是有用且合理的.例如,在退出一组嵌套很深的循环时就是这样.为了应对这种情况,Java定义了break语句的扩展形式.例如,通过使用这种形式的break语句,可以从多层代码块退出.这些代码块不必是循环或

《Java 7程序设计入门经典》一3.15 使用continue语句

3.15 使用continue语句 也可能要求忽略循环的正常控制结构,提前开始下一次循环.这由continue语句完成.continue语句会有选择地跳过剩下的任何代码和对循环控制条件的判断,强迫开始下次循环.所以,从本质上看,continue语句与break语句具有互补关系.例如,下面的程序用continue语句帮助输出0-100之间的整数. 因为奇数会使循环的迭代提前结束并忽略println(),所以该程序只输出偶数.这使用返回除法余数的运算符%完成.如果该数是偶数,除以2后的余数就是0,i

《Java 7程序设计入门经典》一3.13 使用break语句退出循环

3.13 使用break语句退出循环 在循环过程中,可以使用break语句强制退出循环.这时,循环体中剩余的代码不再执行,循环条件也不再测试.当在循环中遇到break语句时,循环停止,程序控制跳转到循环后的语句上.下面是一个简单的例子: 该程序产生下列输出: 可以看到,尽管for循环设计成从0循环到变量num(这里num是100),但是当i的平方大于等于变量num时,break语句使得其更早停止了. break语句可用于Java的任意一种循环,包括特意写成的无限循环.例如,下面的程序一直读取用户

《Java 7程序设计入门经典》一1.4 Java语言

1.4 Java语言 本书使用Java语言来讲解编程的基础知识.虽然其他编程语言也可以用来达到此目的,但是由于以下两个原因,本书选择了Java:首先,它是世界上使用最广泛的计算机语言之一.所以从实际的观点看,它是绝佳的学习语言.其次,它设计和实现了一些特性,这些特性使得对编程基础知识的介绍变得简单. 但是还有第三个原因.Java展现了现代编程的许多特点.对Java的理解可以使你像专业程序员一样看待和思考编程工作.它是这个时代定义的语言之一. 计算机语言演进是一个正在进行的历史过程,而Java是其

《Java 7程序设计入门经典》一3.1 从键盘输入字符

3.1 从键盘输入字符 到目前为止,本书中的示例程序都向用户显示信息,但不从用户接收信息.于是,只使用了控制台输出,没有使用控制台输入(即键盘输入).主要原因在于,许多Java输入需要依赖和使用本书还未讲到的特性.这些特性在后面才会提及.另外,在真实情况下,许多Java程序和applet是图形界面或是窗口界面的,而不是控制台的.因此,本书的例子很少使用控制台输入.但是,有一种控制台输入相对容易使用,那就是从键盘读入字符.因为本章有许多需要用到这个特性的例子,所以在这里讨论它们. 我们将用Syst

《Java 7程序设计入门经典》一2.15 表达式

2.15 表达式 运算符.变量和字面量都是表达式(expression)的组成部分.当在程序中遇到表达式时,会计算该表达式.因为它在前面的程序中已经用过,所以读者可能对表达式已有相当的直观理解.另外,Java的表达式也与代数中的表达式类似.但是,现在还是要讨论表达式的一些方面. 2.15.1 表达式中的类型转换 在表达式中,可能将两种或多种不同类型但互相兼容的数据混合.例如,因为short类型和long类型都是数值类型,所以在表达式中将它们混合使用.当一个表达式中混合不同种类的数据,它们会转换为

《Java 7程序设计入门经典》一2.11 速记赋值运算符

2.11 速记赋值运算符 Java提供了特别的速记(shorthand)赋值运算符,用于简化一些赋值语句代码.让我们从一些例子开始了解速记赋值运算符.赋值语句: 相同.这两个语句都是将x的值减去100赋予变量x. 在Java中,速记运算符可以用于所有的二元运算符(即需要两个操作数的运算符).速记运算符的一般形式为: var op= expression; 于是,算术速记运算符和逻辑速记运算符有以下几种: 因为这些运算符将运算与赋值结合起来,它们正式的名称是复合赋值运算符(compound ass