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 - 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…

算法讲解 -- 区间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过…

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 …

基于维纳滤波的语音增强算法 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基于维纳滤波语音增强算法的改进实现白文雅&#…

php7 获取文件类型,太简单了!PHP获取文件扩展名的7中方法

PHP中获取文件扩展名的方法第一种&#xff1a;$file x.y.z.png;echo substr(strrchr($file, .), 1);解析&#xff1a;strrchr($file, .)strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置&#xff0c;并返回从该位置到字符串结尾的所有字符第二种&#xff1a;$file…

【EOJ Monthly 2018.12 - A,B,C】套题训练,部分题解

A. 题干&#xff1a; A. 仰望星空 单测试点时限: 2.0 秒 内存限制: 512 MB 你就这样静坐在草地上&#xff0c;离我稍远的地方。 我用眼角瞅着你&#xff0c;你什么话也别说。 语言是误会的根源。 但是&#xff0c;每天&#xff0c;你可以坐得离我近一些…… 你和她一起仰头…

php百度搜索框代码,基于jquery的仿百度搜索框效果代码_jquery

先看看整个的效果图&#xff1a;图一&#xff1a;图二&#xff1a;图三&#xff1a;图四&#xff1a;大概的效果图就这样&#xff0c;接下来直接看源码页面&#xff1a;CSS&#xff1a;.autoSearchText{border:solid 1px #CFCFCF;height:20px;color:Gray;}.menu_v{margin:0;pad…

matlab大作业题题单,2011MATLAB大作业-题目-

(1)求解线性规划问题&#xff1a;minZ 4x1 x2 7x3s.t.x1 x2 x3 53x1 x2 x3 4x1 x2 4x3 7x1,x2 0问各xi分别取何值时&#xff0c;Z有何极小值。(2)编写一个函数&#xff0c;使其能够产生如下的分段函数&#xff1a;0.5x&#xff0c;x 2f(x) 1.5 0.25x&#xff0c;2 x 6&#xff…

php webshell编写,php webshell学习

一、环境kali 192.168.43.177开户apache /etc/init.d/apache2 start/var/www/html/目录下编辑php代码hackbarhttps://github.com/Mr-xn/hackbar2.1.3二、php基础输出函数:echo - 可以输出一个或多个字符串print - 只允许输出一个字符串&#xff0c;返回值总为 1提示&#xff1a…

【CodeForces - 27E】Number With The Given Amount Of Divisors (数论,数学,反素数)

题干&#xff1a; Given the number n, find the smallest positive integer which has exactly n divisors. It is guaranteed that for the given n the answer will not exceed 1018. Input The first line of the input contains integer n (1 ≤ n ≤ 1000). Outp…

*【UVA - 10382】Watering Grass(贪心,区间覆盖问题,思维)

题干&#xff1a; 题目大意&#xff1a; 有一块草坪&#xff0c;长为l&#xff0c;宽为w&#xff0c;在它的水平中心线上有n个位置可以安装喷水装置&#xff0c;各个位置上的喷水装置的覆盖范围为以它们自己的半径ri为圆。求出最少需要的喷水装置个数&#xff0c;如果无论如何…

oracle如何把字符集改回默认,更改oracle字符集

在安装oracle时&#xff0c;选了默认字符集是utf8&#xff0c;后来发现与plsql developer工具联合使用时&#xff0c;会出现各种乱码问题。再加上我的项目也是gbk的&#xff0c;因此&#xff0c;将字符集改成gbk试试。步骤如下&#xff1a;1.查看当前的字符集和语言select * fr…

【HDU - 2570】迷瘴 (贪心,水题,排序,卡精度有坑)

题干&#xff1a; 通过悬崖的yifenfei&#xff0c;又面临着幽谷的考验—— 幽谷周围瘴气弥漫&#xff0c;静的可怕&#xff0c;隐约可见地上堆满了骷髅。由于此处长年不见天日&#xff0c;导致空气中布满了毒素&#xff0c;一旦吸入体内&#xff0c;便会全身溃烂而死。 幸好…

oracle 1天后,Oracle Code One - 第1天 精彩亮点回顾

原标题&#xff1a;Oracle Code One - 第1天 精彩亮点回顾原文作者&#xff1a;Padmini Murthy 产品营销总监2018年Oracle CodOracle CodeOne大会实况 – 第1天2018年Oracle CodeOne大会开幕第一天&#xff0c;精彩纷呈&#xff0c;乐趣繁多。从Developers Exchange活动的欢畅交…

oracle 控制文件冗余,Oracle 添加冗余控制文件 for RAC On Linux

萌哒萌哒的分割线注&#xff1a;添加冗余控制文件期间需要有关库操作&#xff0c;需注意&#xff01;&#xff01;&#xff01;备份控制文件SQL> alter session set tracefile_identifier‘backupctrl‘;Session altered.SQL> alter database backup controlfile to trac…

linux socket bind 内核详解,Socket与系统调用深度分析(示例代码)

1、 什么是系统调用操作系统通过系统调用为运行于其上的进程提供服务。当用户态进程发起一个系统调用&#xff0c; CPU 将切换到 内核态 并开始执行一个 内核函数 。 内核函数负责响应应用程序的要求&#xff0c;例如操作文件、进行网络通讯或者申请内存资源等。在Linux中系统调…

【UVA - 11729】Commando War (贪心,时间调度问题)

题干&#xff1a;&#xff08;Uva不放题干了&#xff09; 题目大意&#xff1a;&#xff08;实在是自己懒得写网上找了一个&#xff09; 解题报告&#xff1a; 调度问题&#xff0c;直接贪心出完成任务需要的时间最长的那个人排序&#xff0c;就行了。 方法正确性的证明以前也…

linux系统键盘记录器,可截获到 QQ 密码 键盘记录器源码

由于 QQ 密码做了特殊的保护&#xff0c;所以通过远程注入得到密码框内容以及通过钩子来得到键盘消息均不能探测到 QQ 的密码&#xff0c;但是通过对键盘驱动的过滤却是可以记录下 QQ 密码输入期间的内容&#xff0c;附上源码。#define DBG 1#include #include #include "…

linux exchange邮件客户端,Linux中使用Hiri邮件客户端访问Exchange帐户

大家都知道 Microsoft Exchange 是企业级邮件市场占有率第一的产品&#xff0c;早已成为 Top 500 企业首选的邮件服务器和客户端标准配备。随着 Office 365 服务在全球的铺开&#xff0c;Exchange 的市场占有率更是越来越高&#xff0c;不少中小企业甚至个人用户都已经开始使用…