java中能构成循环的语句_《编程导论(Java)#183;3.2.4 循环语句》

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

我知道。假设我是一个刚開始学习的人,《编程导论(Java)》非常不适合自学。建议同学们阅读时,一定选择一本其它的书同一时候看,或上网。

fastcry.gif,由于太一般或简单的内容、或我不想留在书中占用篇幅的东西,都省略了。

毕竟,网络上相关的一般描写叙述的内容。大把大把。

卓别林在《摩登时代》中。说明流水线上的工人在高强度下重复运行同一个动作是多么令人郁闷。然而循环/迭代(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的处理,參数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

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

……

1cdb4dd23c1e4d08f68abef35f5ad2da.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CodeForces - 340B 】Maximal Area Quadrilateral (计算几何,枚举,有坑)

题干&#xff1a; Iahub has drawn a set of n points in the cartesian plane which he calls "special points". A quadrilateral is a simple polygon without self-intersections with four sides (also called edges) and four vertices (also called corners)…

php网站的编辑器,5款适合PHP使用的HTML编辑器推荐

概述Web开发中&#xff0c;很多地方都会用到HTML编辑器(富文本编辑器)&#xff0c;我也用过几种&#xff0c;如UEditor、CkEditor等。这几天看了几篇文章&#xff0c;都是关于HTML编辑器的&#xff0c;写个文章记录下。推荐的编辑器simditor这个编辑器是前几天刚看到的&#xf…

【牛客 - 301哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级 )】小乐乐和25(模拟,技巧)

题干&#xff1a; 小乐乐特别喜欢25这个数字&#xff0c;他想把所有的数字都变成25的倍数。 现在小乐乐得到一个数字&#xff0c;想问问你最少用几次操作才可以把这个数字改造成25的倍数。 对于一次操作我们可以把相邻的两位做交换&#xff0c;比如123经过一次操作之后就可以…

怎么表示一个PHP语句块,php switch语句多个值匹配同一代码块应用示例

先说说switch()语句的格式switch(表达式){case 匹配1&#xff1a;当匹配1和表达式匹配成功执行的代码;break;case 匹配2&#xff1a;当匹配2和表达式匹配成功执行的代码;break;default&#xff1a;如果case语句没有与表达式成功所执行的代码;}理解 switch 是怎样执行的非常重要…

php查找顶级分类,php 无限级分类 获取顶级分类ID,php顶级_PHP教程

php 无限级分类 获取顶级分类ID&#xff0c;php顶级有这样一个表&#xff0c;id是分类的ID&#xff0c;name是分类名称&#xff0c;pid是上级分类的ID。现在有个分类ID&#xff0c;程序要找到它上级的上级的上级……分类的ID&#xff0c;简单说就是找出顶级分类的ID。比如“新鲜…

【POJ - 2392】Space Elevator (dp,优秀的背包问题)

题干&#xff1a; The cows are going to space! They plan to achieve orbit by building a sort of space elevator: a giant tower of blocks. They have K (1 < K < 400) different types of blocks with which to build the tower. Each block of type i has heigh…

php三种web开发技术,三种WEB开发主流技术ASP-PHP-JSP的评价

三种Web开发主流技术ASP-PHP-JSP的评价[摘要]本文从程序开发者的角度&#xff0c;对现今社会盛行的WEB开发技术进行了分析&#xff0c;旨在让WEB 开发人员、使用者、准备学习的人对WEB开发技术有更加深入的了解&#xff0c;并为WEB应用程序开发提供指导。[关键词]WEB开发技术 A…

*【CodeForces - 1088 ABC】套题比赛,A水题B模拟C构造D交互

A. Input The only line contains the integer xx (1≤x≤100)(1≤x≤100). Output You should output two integers aa and bb, satisfying the given conditions, separated by a space. If no pair of integers satisfy the conditions above, print "-1" (wit…

php 计算前几天,php计算几分钟前、几小时前、几天前的几个函数、类分享

搜索热词一、函数实现实例1&#xff1a;代码如下:function time_tran($the_time){$now_time date("Y-m-d H:i:s",time()8*60*60);$now_time strtotime($now_time);$show_time strtotime($the_time);$dur $now_time - $show_time;if($dur < 0){return $the_tim…

【CodeForces - 608D】Zuma(区间dp)

题干&#xff1a; Genos recently installed the game Zuma on his phone. In Zuma there exists a line of n gemstones, the i-th of which has color ci. The goal of the game is to destroy all the gemstones in the line as quickly as possible. In one second, Geno…

matlab没有int函数,matlab 未定义与 'char' 类型的输入参数相对应的函数 'int'。

最后你那zd句plot(int(k),double(s));里的int(k);不对。你如果想以k为横坐标&#xff0c;直接把int去掉&#xff0c;如回果非想要变成整数可以用floor(k);注&#xff1a;fix&#xff1a;向零取整 floor&#xff1a;向小取整 round&#xff1a;四舍五入 ceil&#xff1a;向...如…

【CodeForces - 347C 】Alice and Bob (思维,数学,等差数列)

题干&#xff1a; It is so boring in the summer holiday, isnt it? So Alice and Bob have invented a new game to play. The rules are as follows. First, they get a set of n distinct integers. And then they take turns to make the following moves. During each …

java读取yaml配置文件,snakeyaml读取yaml配置文件

下面上我解析yaml文件的例子&#xff1a;// me.yamlage: 1name: jiaobuchongparams:event: whats upurl: http://www.jiaobuchong.comfavoriteBooks:- Gone with the wind- The Little Prince对应的JavaBean类&#xff1a;// Me.javapublic class Me {private Integer age;priv…

算法讲解 -- 区间dp经典模型与优化(石子归并)

石子合并问题是最经典的DP问题。首先它有如下3种题型&#xff1a; PPT讲解&#xff1a;点击打开链接 (1)有N堆石子&#xff0c;现要将石子有序的合并成一堆&#xff0c;规定如下&#xff1a;每次只能移动任意的2堆石子合并&#xff0c;合并花费为新合成的一堆石子的数量。求将…

cpu影响matlab仿真速度吗,Proteus仿真速度很慢的分析

类型&#xff1a;行业软件大小&#xff1a;1.1M语言&#xff1a;中文 评分&#xff1a;6.5标签&#xff1a;立即下载这篇文章是我的个人实践经验&#xff1a;很多朋友在做Proteus硬件仿真的时候可能都碰上了仿真速度慢的问题&#xff0c;在点击了开始仿真之后&#xff0c;CPU过…

【HDU - 5900】QSC and Master(区间dp)

题干&#xff1a; Every school has some legends, Northeastern University is the same. Enter from the north gate of Northeastern University&#xff0c;You are facing the main building of Northeastern University.Ninety-nine percent of the students have not …

php set_timeout,和 JS 一样的 php setTimeout 函数

112016-07-11 21:34:11 08:00szopen 貌似没有复杂啊//enable ticksdeclare (ticks 1);//setTimeout event list$timeoutQueue new SplObjectStorage;register_tick_function(function() {global $timeoutQueue;foreach ($timeoutQueue as $v) {$callBack $v();if (is_callab…

mysql 7天自动拒单功能,mysql查询最近7天的数据,没有数据自动补0

select DATE( createtime) date , createtime, count(1) as count from order表 where DATEDIFF( now(), createtime)<7group by date ;12 月九号没有;给他在关联一张日期的表;--生成从今天开始完整的7天日期DECLARE LastSevenDaytable(day date)DECLARE StartDaydate …

【UVA - 10038】Jolly Jumpers (模拟,水题,标记)

题干&#xff1a; 题目大意&#xff1a; 要任意相邻的两个数的绝对值在[1,n)&#xff0c;而且这个范围内的每个数都要出现一次。 解题报告&#xff1a; 直接模拟就行了、 AC代码&#xff1a; #include<cstdio> #include<iostream> #include<algorithm> …

基于维纳滤波的语音增强算法 matlab,基于维纳滤波语音增强算法的改进实现

通过对维纳滤波的介绍,实现了基本维纳滤波效果;利用两级维纳滤波和两级滤波器组滤波方法实现了语音增强,达到了良好的效果。维普资讯 http://doc.docsou.com文章编号&#xff1a;0 2 8 8 (o 7 0 - 0 4 0 10—6 4 2 o )1 0 4 - 3基于维纳滤波语音增强算法的改进实现白文雅&#…