《编程导论(Java)3.2.4 循环语句》

本文完全复制《编程导论(Java)·3.2.4 循环语句》的内容,除【】中的说明文字。请阅读和比较其他编程教材。

我知道,如果我是一个初学者,《编程导论(Java)》很不适合自学。建议同学们阅读时,一定选择一本其他的书同时看,或上网。,因为太一般或简单的内容、或我不想留在书中占用篇幅的东西,都省略了。毕竟,网络上相关的一般描述的内容,大把大把。

卓别林在《摩登时代》中,说明流水线上的工人在高强度下反复执行同一个动作是多么令人郁闷。然而循环/迭代(loop/iteration) 即重复执行一个或者多个操作却是计算机擅长的。学习编程最重要的内容之一,是克服人类对循环结构的不适感,彻底掌握循环结构。【对于初学者,循环是一个小坎】

1. 循环基础:while语句

循环/迭代语句是根据某个表达式的值反复执行某段代码块。循环语句有3种形式: while、do-while 和for语句。最基本的循环语句是while语句。

例程 3-5最原始的循环语句package semantics.statement;public class WhileDemo{/**打印[0,10) */ public static void loopPrint(){int n = 0;while(n < 10) System.out.println(n++);}/**求[0,n)的整数和. */public static void sum(int n){int total=0; //保存结果while(n > 0) total += n–;System.out.println(total);}}

while语句和单选的if语句结构相同,把if改成while就成了while语句。其语法为:

while ( b-e ) {

statement(s)T

}

其语意为:遇到关键字while,求b-e的值。当/只要(while) b-e为true,则执行随后的代码块——循环体;循环体执行后再次求b-e的值,直到b-e为false则跳过代码块。

while语句如同一个能够反复执行的单选if语句。布尔表达式b-e在这里称为循环条件,遇到if(true)或while(true),单选if的代码块仅执行一次,而while语句则可能永远执行。有效地终止循环是掌握循环的关键。

while ( (i = in.read()) !=-1 ) 。在读取文件时,一旦读取的数据为-1,表示文件结束,因而循环就结束。

循环由一个哨兵监控,称为哨兵结束模式。哨兵(sentinel)是使循环结束的特殊的值,用户输入该值,或通过计算得到该值导致循环结束。哨兵结束模式通常不能够事先确定循环的次数。读取文件时,,-1为哨兵。在编写哨兵结束模式的循环语句时,要特别注意确保循环能够有效地结束。如果在BuleJ中出现无限循环,右击JVM工作状态条,重启JVM (Ctrl+Shift+R) 。

哨兵结束模式的另一个典型应用是在接受键盘输入时,定义一个特殊的字符串如"886"表示终止程序。

for(int i =0; i<array.length;i++)。对数组array的处理,参数array的长度为循环结束条件。

N次结束模式是又一种循环结束模式,它意味着循环将执行可以预知的次数,程序会自动运行直到结束而不依赖外界条件。再例如求一个正整数的各个数字之和。任一正数如12345,12345/10为1234,随着每次循环执行n /=10则n变成了1234、123、12、1、0。因而循环结束的条件为n != 0。【注意,大量关于整数的程序,都用到n /=10和n %10】例程 3-6 N次结束模式  public static void dSum(int n){int total=0;while(n != 0){total += n%10;n /=10;}System.out.println(total);}

程序中while(n !=0)通常表达为while(n> 0),效果一样。

假设将循环条件改成while(n> =0),当n变成0后,计算机将一直执行循环体一遍又一遍又一遍,每一次n都等于0。这种情况称为现无限循环(infinite loop)。

在求[0,n)的整数和、求一个正整数的各个数字之和的例子中,都有改变n的值(目的是改变b-e的值)的某个表达式如n++,该表达式称为计数表达式( counting expression)。它使得循环倾向于结束。

练习3-1.:例程3-5中循环语句可以写成单句如while(n > 0) total += n–;

在该单句中计数表达式是什么?能否用–n?

练习3-2.:编程。semantics.statement .WhileDemo中添加方法,计算n的阶乘(factorial)。

/**

* 求n的阶乘。阶乘的数学定义: n>0,n!= 1*2*…*n。

* @param n 自然数n. (n>0)

* @return n的阶乘。如果n<1,返回为0;如果n>=13,注意溢出。

*/

public static int factorial ( int n )

练习3-3.:编程计算[1,n]之间奇数的和。提示:计数表达式为赋值表达式n+=2。

练习3-4.:编程验证3x+1问题。将任一自然数x按以下规则进行计算,最终可得到1。

规则:若数为偶数,则除以2;若为奇数,则乘以3并加1。将得到的数按本规则重复运算,最终可得到1。

该问题被称为3x+1问题、叙拉古(Syracuse)猜想、科拉兹(Collatz)猜想或角谷猜想。

提示:循环测试表达式为x!=1,或2的其他幂如x!=2。

如果b-e一开始就为false,while语句的循环体执行0次。为了保证循环体至少执行一次,可以采用do-while语句:

do{

statements;

} while (be);

注意:do-while语句需要一个分号。

2. for语句

最常用的循环语句是for语句。它将与循环相关的3个表达式——初始化表达式、循环测试表达式和计数表达式集中在for后面一个()中。这种3表达式的for循环(Three-expression for loops)自C语言起,几乎在所有语言中被采用。

for ( [ForInit]; [ b-e]; [ ForUpdate] ) {

<循环体>

}

不要做刺猬能不与人结仇就不与人结仇,

《编程导论(Java)3.2.4 循环语句》

相关文章:

你感兴趣的文章:

标签云: