
正文
《编程导论(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
}
其语意为:遇到keywordwhile,求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] ) {
<循环体>
}
² 測试表达式b-e。与while语句中的b-e循环測试一样。仅仅要其值为true,则运行随后的循环体。若循环測试表达式省略,则默觉得true。而while语句中则不可以省略。至少为while(true){}。
² 初始化表达式ForInit,主要指明循环中使用的索引变量(index variable)怎样初始化。如for(int i=0;i<10; i++)中。索引变量i被初始化为0。索引变量表示了循环的轮次。它參与循环体计算时。体现每一轮循环的不同。
² 计数表达式通常称为step,表示步进的幅度和方向。指定每一轮后循环索引变量怎样变化,如i++、i -=2等。
for语句的运行流程如图3-4所看到的。【略。
本书中少见的几个流程图之中的一个】
将for语句还原成while语句的形式,有助于熟悉for语句的运行流程。
for (init; test; step){statements;}等价于以下的while语句:
init;
while(test){
statements;
step;
}
对于编程刚開始学习的人,理解for语句不难,关键是须要重复和大量的练习。毕竟人不太擅长也不喜欢循环地做事情。而为了利用计算机的任劳任怨,就须要编写各种循环语句。
例程 3-7素数
package semantics.statement;
import static java.lang .Math.*;
public class Prime{
/**
* 推断參数n是否为素数
*/
public static boolean isPrime(int n){
if(n==1) return false;
for(int j=2; j< Math.sqrt(n+1); j++){
if (n%j==0) return false;
}
return true;
}
}
3. for语句的变体
3-表达式的for循环,其每个表达式都是可选的(能够省略的)。
如:for( ; ; ) break;//
for循环的语法要求为:ForInit能够是1)局部变量声明, 2)能够构成表达式语句的表达式组。
而ForUpdate能够是表达式组。表达式组是由分隔符逗号切割的多个表达式语句。
表达式组只用于for循环(while中不存在这些组成元件)。因而能够编写例如以下的for语句:
intx=10,y=0;
for(System.out.println(x),y++; x>y; x=x-2,y=y*2,System.out.println(y));
编译没有问题, BlueJ 会在类图上出现红色警告:This class cannotcurrently be parsed,可是不影响该代码的执行。
为了保持代码的可读性,须要约束自己不在ForInit中用法调用、自增自减语句。而只使用局部变量声明或赋值语句;在ForUpdate中,只使用自增自减和赋值语句。
假设循环被两个相互影响的变量控制,使用逗号则比較合理。
for(int i=0,j=10; i<j ;i++,j--){
System.out.println(i + ""+j);
}
在某些专业程序猿编写的Java代码中,会出现各种循环语句的变体,包含空循环体、逗号和自增或自减用于各表达式中。比如求i和j的中间值,能够例如以下:
int i=0;
for(int j=10 ; ++i < --j ; ) ; //空语句
System.out.println("中间数为 "+i);
练习3-1.:将while部分的练习题用for语句实现。 |
练习3-2.:以for(;循环測试表达式;){ 循环体}模拟标准的while语句。说明for语句较while的优势。 |
练习3-3.:说明在循环语句中使用浮点数进行循环条件測试可能带来的问题。 |
练习3-4.:使用级数求近似值。 已知【公式】 编程e(double x),使用do-while语句计算e^x的近似值。 |
练习3-5.:编程fibonacci()。分别使用while语句和for语句输出Fibonacci序列的前10项。已知【公式】 |
4. 嵌套循环结构
各种循环体内又出现循环语句。能够构成嵌套循环结构。
有兴趣能够先翻阅[第11章排序],当中有大量的样例。
这里打印九九乘法表。共9行9列,外循环索引i控制行,内循环索引j控制列。
例程 3-8 九九乘法表
package semantics.statement;
import static tips.Print.*;
public class ForDemo{
/**打印出九九乘法表 */
public static void mul99() {
for (int i=1; i<10; i++){
for (int j=1; j<=i; j++)///j<=i 三角,j<10 矩形
System.out.printf("%d*%d=%2d ",i, j, i * j);
pln();
}
}
public static void Table99() {
for (int i=1,j=1; i<10; j = (j==9)?(++i):(j+1)){
p(i+"*"+j+"="+i*j+ (j==9 ?'\n' : ' '));
}
}
}
调用mul99()的输出为:
1*1= 1
2*1= 2 2*2= 4
3*1= 3 3*2= 6 3*3= 9
4*1= 4 4*2= 8 4*3=12 4*4=16
……
调用Table99()的输出为:
1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9
2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=162*9=18
……

《编程导论(Java)·3.2.4 循环语句》的更多相关文章- 《编程导论(Java)&;#183;2.1.3改写(override)》
<编程导论(Java)·2.1.3改写(override)>,收集override内容. 方法改写(method overriding)是指对于父类定义的一个实例方法,同意子类提供自己的实 ...
- Java学习笔记八:Java的流程控制语句之循环语句
Java的流程控制语句之循环语句 一:Java循环语句之while: 生活中,有些时候为了完成任务,需要重复的进行某些动作.如参加 10000 米长跑,需要绕 400 米的赛道反复的跑 25 圈.在 ...
- 《编程简介(Java) &;#183;10.3递归思想》
<编程简介(Java) ·10.3递归思想> 10.3.1 递归的概念 以两种方式的人:男人和女人:算法是两种:递归迭代/通知: 递归方法用自己的较简单的情形定义自己. 在数学和计算机科学 ...
- ★Java语法(七)——————————循环语句
package 自我总结; public class 循环语句 { public static void main(String[] args) { // while 循环 // 用法: // whi ...
- 初学Java scirpt(判断、循环语句)
在编写代码时,我们经常需要为不同的判断结果来执行不同的动作以及需要反复执行同一段代码,这时我们就需要使用判断和循环语句来实现. 1.判断语句(if) 判断语句经常用的有(if......else).( ...
- 【Java基础】【04循环语句&;方法】
04.01_Java语言基础(循环结构概述和for语句的格式及其使用) A:循环结构的分类 for,while,do...while B:循环结构for语句的格式: for(初始化表达式;条件表达式; ...
- Java控制语句例题,for循环语句,if条件语句等,Scanner类与Random类,Math.max()方法
例题:编写程序,生成5个1至10之间的随机整数,并打印结果到控制台 import java.util.Random;class demo09 { public static void main(Str ...
- 第4章 流程控制----编写Java程序,使用while循环语句计算1+1/2!+1/3!+...+1/20!之和
package four; public class fouronetwo { public static void main(String args[]){ double sum = 0,a = 1 ...
- 《编程导论(Java)&;#183;1.1.2 颠倒的世界(柏拉图法则)》
假设你读<编程导论(Java)·1.1.2 颠倒的世界(柏拉图法则)>感到无趣,请尝试评价这个段子. 3. Classes Classes drive me crazy. That mig ...
随机推荐- fir.im Weekly - 暖心的 iOS 持续集成,你值得拥有
一则利好消息,flow.ci 支持 iOS 项目持续集成,想试试的伙伴去 Gitter群 问问.首批尝鲜用户@阿米amoy 已经用 flow.ci 实现了基本的 iOS 持续集成,并详细记录整个 Bu ...
- 将.war文件解压到指定目录
jar命令无法将.jar解压到指定目录,因为-C参数只在创建或更新包的时候可用 要将.jar文件解压到指定目录可以用unzip命令 unzip命令在windows下自带就有,不用另外下载安装 下面是将 ...
- 使用D3绘制图表(7)--饼状图
这次是绘制饼状图,也是这一次使用D3绘制图表的最后一篇,大家可以从其他地方深入学习D3绘制图表,也可以直接查看D3的API进行学习,本次绘制饼状图的数据跟之前的卸载数组里面的不一样,这一次是使用d3的 ...
- C++设计模式-Singleton
Singleton单例模式 Singleton 是对全局变量的取代策略作用:保证一个类只能有一个实例,并提供一个全局唯一的访问点. 仅有一个实例:通过类的静态成员变量来体现.提供访问它的全局访问点:访 ...
- 用c#开发微信 (13) 微统计 - 阅读分享统计系统 3 UI设计及后台处理
微信平台自带的统计功能太简单,有时我们需要统计有哪些微信个人用户阅读.分享了微信公众号的手机网页,以及微信个人用户访问手机网页的来源:朋友圈分享访问.好友分享消息访问等.本系统实现了手机网页阅读. ...
- wp控件
导航控件 Silverlight的Windows Phone应用程序是基于一种可以让用户在不同页面内容间来回导航的页面模型.这个模型是基于其中的frame控件,而页面间的导航就是靠它. 下面的表格列出 ...
- C# 数据操作工具类
CREATE PROCEDURE [dbo].[RecordFromPage] @SelectList VARCHAR(max), @TableSource VARCHAR(100), @Search ...
- PHP set_exception_handler 设置异常处理函数
If you're handling sensitive data and you don't want exceptions logging details such as variable con ...
- 【原创】大数据基础之Logstash(3)应用之http(in和out)
一个logstash很容易通过http打断成两个logstash实现跨服务器或者跨平台间数据同步,比如原来的流程是 logstash: nginx log -> kafka 打断成两个是 log ...
- luogu P1081 开车旅行
传送门 这题的暴力做法显然是照题意模拟,从每个点出发暴力跳.而这个暴跳显然是可以倍增优化的,就是预处理出从每个点,(一开始是A)往后跳\(2^k\)步,能到哪里,以及\(A\)和\(B\)的路程,然后 ...
<编程导论(Java)·2.1.3改写(override)>,收集override内容. 方法改写(method overriding)是指对于父类定义的一个实例方法,同意子类提供自己的实 ...
Java的流程控制语句之循环语句 一:Java循环语句之while: 生活中,有些时候为了完成任务,需要重复的进行某些动作.如参加 10000 米长跑,需要绕 400 米的赛道反复的跑 25 圈.在 ...
<编程简介(Java) ·10.3递归思想> 10.3.1 递归的概念 以两种方式的人:男人和女人:算法是两种:递归迭代/通知: 递归方法用自己的较简单的情形定义自己. 在数学和计算机科学 ...
package 自我总结; public class 循环语句 { public static void main(String[] args) { // while 循环 // 用法: // whi ...
在编写代码时,我们经常需要为不同的判断结果来执行不同的动作以及需要反复执行同一段代码,这时我们就需要使用判断和循环语句来实现. 1.判断语句(if) 判断语句经常用的有(if......else).( ...
04.01_Java语言基础(循环结构概述和for语句的格式及其使用) A:循环结构的分类 for,while,do...while B:循环结构for语句的格式: for(初始化表达式;条件表达式; ...
例题:编写程序,生成5个1至10之间的随机整数,并打印结果到控制台 import java.util.Random;class demo09 { public static void main(Str ...
package four; public class fouronetwo { public static void main(String args[]){ double sum = 0,a = 1 ...
假设你读<编程导论(Java)·1.1.2 颠倒的世界(柏拉图法则)>感到无趣,请尝试评价这个段子. 3. Classes Classes drive me crazy. That mig ...
- fir.im Weekly - 暖心的 iOS 持续集成,你值得拥有
一则利好消息,flow.ci 支持 iOS 项目持续集成,想试试的伙伴去 Gitter群 问问.首批尝鲜用户@阿米amoy 已经用 flow.ci 实现了基本的 iOS 持续集成,并详细记录整个 Bu ...
- 将.war文件解压到指定目录
jar命令无法将.jar解压到指定目录,因为-C参数只在创建或更新包的时候可用 要将.jar文件解压到指定目录可以用unzip命令 unzip命令在windows下自带就有,不用另外下载安装 下面是将 ...
- 使用D3绘制图表(7)--饼状图
这次是绘制饼状图,也是这一次使用D3绘制图表的最后一篇,大家可以从其他地方深入学习D3绘制图表,也可以直接查看D3的API进行学习,本次绘制饼状图的数据跟之前的卸载数组里面的不一样,这一次是使用d3的 ...
- C++设计模式-Singleton
Singleton单例模式 Singleton 是对全局变量的取代策略作用:保证一个类只能有一个实例,并提供一个全局唯一的访问点. 仅有一个实例:通过类的静态成员变量来体现.提供访问它的全局访问点:访 ...
- 用c#开发微信 (13) 微统计 - 阅读分享统计系统 3 UI设计及后台处理
微信平台自带的统计功能太简单,有时我们需要统计有哪些微信个人用户阅读.分享了微信公众号的手机网页,以及微信个人用户访问手机网页的来源:朋友圈分享访问.好友分享消息访问等.本系统实现了手机网页阅读. ...
- wp控件
导航控件 Silverlight的Windows Phone应用程序是基于一种可以让用户在不同页面内容间来回导航的页面模型.这个模型是基于其中的frame控件,而页面间的导航就是靠它. 下面的表格列出 ...
- C# 数据操作工具类
CREATE PROCEDURE [dbo].[RecordFromPage] @SelectList VARCHAR(max), @TableSource VARCHAR(100), @Search ...
- PHP set_exception_handler 设置异常处理函数
If you're handling sensitive data and you don't want exceptions logging details such as variable con ...
- 【原创】大数据基础之Logstash(3)应用之http(in和out)
一个logstash很容易通过http打断成两个logstash实现跨服务器或者跨平台间数据同步,比如原来的流程是 logstash: nginx log -> kafka 打断成两个是 log ...
- luogu P1081 开车旅行
传送门 这题的暴力做法显然是照题意模拟,从每个点出发暴力跳.而这个暴跳显然是可以倍增优化的,就是预处理出从每个点,(一开始是A)往后跳\(2^k\)步,能到哪里,以及\(A\)和\(B\)的路程,然后 ...








