坚持是一件说起来容易,做起来不容易的事情。
选择语句可以让程序有选择地执行某个语句块,循环语句则可以让程序重复地执行某个语句块。循环语句包括while语句、do-while语句和for语句。
1、while 语句
while语句是使用频率最高的循环语句,其语法格式如下。
while(逻辑表达式){语句块}
while 语句的执行过程如下。
(1) 判断“while(逻辑表达式)”中逻辑表达式的值,如果返回true,就按顺序执行大括号内的语句块。(在循环语句中,语句块又被称为循环体)
(2) 语句块执行完毕后,继续判断while循环语句中逻辑表达式的值,如果然返回true,就再次按顺序执行大括号内的语句块;如果返回false,就直接结束。
(3) 重复步骤(2),直到逻辑表达式返回false,结束循环。
while语句的表达式必须是逻辑表达式,返回的结果也必须是逻辑型。while语句中要有改变逻辑表达式的值的条件,否则其值一直返回true,会造成死循环。
如果while 后面只有一条语句,省略大括号也可以,但为了养成良好的编程习惯还是建议加上大括号。
【例1】用 while 语句编写一个程序,计算 50 以内的奇数之和并输出。
具体代码如下。
public class OddNumAddition {publicstaticvoidmain(String[] args) {//定义2个整型变量并赋值,num的初始值为第1个奇数1int sum=0.num=1;// 当变量 pum 的值小于等于 50 时while(num<=50){// 赋值运算sum+=num;//赋值运算num+=2;}System.out.println("50 以内所有奇数的和是:"+ sum);}}
程序运行结果为:
50 以内所有奇数的和是:625在上述代码中,变量num从值为1开始循环,每次循环都要把num的值加到变量sum上,而num的值每次都加2,直到表达式num<=50不成立才停止循环。
2、do-while 语句
do-while语句的功能与while语句的功能很相似,大部分时候二者可以互相替代。
do-while语句的基本语法格式如下。
do{语句或语句块}while(逻辑表达式);
do-while 语句的执行过程如下。
(1) 按顺序执行do后面的语句块(循环体)。
(2) 对“while(逻辑表达式)”中的逻辑表达式进行判断,如果其值返回true,则再次执行do后面的循环体;执行完之后再次对逻辑表达式进行判断,如果依然返回true,就再次按顺序执行do后面的语句块。
(3) 重复步骤(2),直到逻辑表达式返回false,结束循环。
和 while 语句一样,do-while语句中“while(逻辑表达式)”中的逻辑表达式返回值的类型必须是逻辑型。
do后面的循环体中也要有改变逻辑表达式返回值的语句,否则 while后面的逻辑表达式一直返回true,那do后面的循环体会不断被执行,造成死循环。
如果do后面的循环体只有一条语句,省略大括号也可以,但同样建议加上大括号。
注意:do-while语句后面一定要有分号。
while语句是先判断逻辑表达式的值,后执行循环体,而do-while语是先执行循环体,后判断逻辑表达式的值。使用相同逻辑表达式和循环体时,两种语得到的结果大部分时候一样,但是因为即使逻辑表达式的值在第一次判断时就是false,do-while语句也会执行一次,因此其值可能会与while语句不同。
例如:
public class WhileTest {publicstaticvoidmain(String{] args){//声明一个逻辑变量yesOrNo,并赋初值falseboolean yesOrNo=false;//声明一个整型变量num,并赋初值0int num=0;//如果变量yesOrNo的值为truewhile(yesOrNo)//执行循环体:自增运算,num的值加1num++;}//输出num的值Sy fm.out.printn("num=" + num);}}
此代码属于while语句,程序会先对变量yesOrNo的值进行判断,然后决定是否执行后面的自增运算(循环体)。因为yesOrNo的初始值为false,所以不执行环体。
代码运行结果为:
num=0下面用同样的表达式和循环体写成do-while语句。
public class DoWhileTest{publicstaticvoidmain(String[] args){//声明一个逻辑变量yesOrNo,并赋初值falseboolean yesOrNo = false;//声明一个整型变量num,并赋初值0int num=0;//执行循环体do {//自增运算,num的值加1num++//对逻辑变量yesOrNo的值进行判断}while(yesOrNo);//输出num的值System.out.println("num"+num)}}
在上述代码中,程序会先执行一次循环体,后判断逻辑表达式,所以其运行结果为:
num=1【例2】用 do-while 语句编写一个程序,计算 100 以内的奇数之和并输出,具体代码如下。
public class OddNumAddition {publicstaticvoidmain(String[] args){//定义2个整型变量并赋值,um的初始值为第1个奇数1int sum=0,sum=1;do{//赋值运算sumt=num;//赋值运算num+=2;//当变量 num 的值小于等于 100 时}while (num<=100);System.out.println("100 以内所有奇数的和是:"+sum)}}
程序运行结果为:
100以内所有奇数的和是:25003、for 语句
for语句是一种形式灵活、功能强大的循环语句,一般在已知所需循环次数的情况下使用。for语句的语法格式如下。
计算初始化表达式;逻辑表达式:迭代表达式)前句块
其执行过程如下:
(1) #计算初始化表达式的值。初始化表达式通常用于对循环变量赋初值,只会换行一次。
(2) #计算逻辑表达式的值,如果返回的值为tue,就执行语句块(循环体);如果返回的值为 talse,就结束整个for 循环。
(3) #计算迭代表达式的值。迭代表达式的主要功能是改变循环变量的值,为行下一次循环做准备。
(4) 再次执行步骤(2)和步骤(3),直到步骤(2)中的逻辑表达式返回false,就结束整个for循环。
注意:for语句的3个表达式之间必须有分号,不能省略。
【例3】用for语句编写一个程序,计算100以内所有整数的和并输出具体代码如下。
public class NumAddition {publicstaticvoidmain(Stringl] args){//声明变量并赋初值int sum=0;//for语句的3个表达式for (int num=l;num<=100;num++){//循环体sum=sum+num;}System.out.println("100 以内所有整数的和是:"+ sum);}}
程序运行结果为:
100以内所有整数的和是:50504、循环语句的嵌套
循环语句能单独使用,也能整体嵌入其他循环语句使用。嵌套时,既可以嵌套同类型的循环语句,也可以嵌套其他类型的循环语句。
理论上,循环语句的嵌套层数可以无限多,但实际使用时不建议嵌套太多层,因为嵌套层数过多会使程序的执行效率降低很多。
正常情况下,嵌套的循环语句在执行时,会先执行内层循环,后执行外层循环嵌套的循环语句语法结构有以下几种。
4.1 while 语句的嵌套
while(逻辑表达式1){while(逻辑表达式 2){...}}
4.2 do-while 语句的嵌套
do{do{...}while(逻辑表达式1);}while(逻辑表达式 2);
4.3 for 语句的嵌套
for(初始化表达式1;逻辑表达式1;迭代表达式1){for(初始化表达式2;逻辑表达式2:迭代表达式2){...}}
4.4 while 语句与 do-while 语句的嵌套
while(逻辑表达式1){do {...}while(逻辑表达式 2);}
4.5 while语句与for语句的嵌套
while(逻辑表达式1){for(初始化表达式;逻辑表达式2;迭代表达式){...}}
4.6 do-while 语句与 while 语句的嵌套
do {while(逻辑表达式1){...}}while(逻辑表达式2);
4.7 do-while 语句与 for 语句的嵌套
do {for(初始化表达式;逻辑表达式1;选代表达式){...}}while( 逻辑表达式 2);
4.8 for 语句与 while 语句的嵌套
for(初始化表达式;逻辑表达式1;迭代表达式){while(逻辑表达式 2){...}}
4.9 for 语句与 do-while 语句的嵌套
for(初始化表达式;逻辑表达式1;迭代表达式){do{...}while(逻辑表达式2);}
【例4】编写一个程序,使用循环的嵌套来处理二维数组。
具体代码如下。
public class NestedLoopTest{publicstaticvoidmain(String[] args){//声明两个变量i和jint i ,j;//定义一个二维数组并为二维数组赋值int[][] array = new int[8][8];for(i=0;i<8:i++){for(j=0:j<8;j++){//第i行、第j列的元素的值为i与j之和array[i][j]=i +j;}}//输出二维数组中的元素值//对二维数组的行执行循环for(i=0:i<8:i++){//对每一行中的列进行循环for(j=0;j<8:j++){//输出二维数组第i行、第i列的元素的值System.out.print (array[ij]+" ");}System out.println(""); //换行}}}
程序运行结果为:
0 1 2 3 4 5 6 71 2 3 4 5 6 7 82 3 4 5 6 7 8 93 4 5 6 7 8 9 104 5 6 7 8 9 10 116 7 8 9 10 11 12 137 8 9 10 11 12 13 14
在程序 NestedLoopTest.java中,二维数组下标i和j的值的改变是通过嵌套的双重循环for语句来实现的,它依次为二维数组的元素赋值并同时输出二维数组中每个元素的值。
5、foreach 语句
#foreach语句又被称为增强型for循环语句,可以用来简化某些循环语句的书写。for语句一般在已知所需循环次数的情况下使用,而这里foreach语句则是在遍历数组和集合的元素时使用。
foreach语樑顸蹑的工作原理是逐个枚举出数组或集合中的每一个元素,且枚举一个元素就执行-次语句块中的内容。另外需要注意的是,在使用foreach语的过程中,不可以更改遍历中的集合。
foreach语句的语法如下,
for(元素类型选代变量:数组或集合){使用数据变量的循环体语句块}
例如想要遍历某个一维数组中的元素(就是依次查看数组中的元素),如果使用for语句,代码如下。
int[] array = {1,2.3,4,5}; //声明一个整型数组并赋初值for(int i=0;i<array.length;i++)( // for 循环语句Sytem.out.println(array[i]); //打印已经遍历到的元素
说明:上述代码使用了array.length的数组对象属性。在Java语言中,数组被看成一个拥有length属性的对象(属性的概念在后续章节会讲到),它代表数组的大小或长度。
如果使用 foreach 语句,代码如下。
int[] array = 11,2,3,4,5}; //声明一个整型数组并赋初值for(int ele : array){ //forcach循环语句,遍历数组元寨System.out.println(ele):}
该代码在第一次循环中,会把从数组array中依次取出的元素赋值给ele 变量,开发人员不需要判断当前遍历到的数组位置是否超出长度范围。当然,#ele变量的数据类型必须与数组中元素的数据类型相同。
另外,即使数组中的元素是对象,也可以使用 foreach语句。例如:
//声明一个字符串类型数组,并初始化String[]an={"王老师""张老师”"李老师”};//forcach 循环语句,遍历数组元素for(String name : arr){System.out.println(name);}
6、对一维数组进行排序
在实际的程序开发中,经常需要对数组中的元素进行排序,在处理这类问题时使用循环语句是个很好的方法。
【例5】编写一个程序,使用冒泡排序法对一维数组进行排序。
具体代码如下。
public classArraySort{public static void main(String[] args){//定义变量i和jint i,j;int[] ar = {11.22.3.44.55};//定义变量len,获取数组的长度,并保存在变量len中int len = arr.length;System.out.println("数组元素排序前的序列是:”);// 遍历数组i中的元素for(i-0;i<len;i+ +){//输出System.out.print(arr[i]+ " ");}//使用双重循环对数组排序System.out.println("")//循环比较len-1次for(i-0;i<len-l;i++){//对相邻元素进行循环比较for( j=0:j<len-1-i-j++){int temp-0;//如果j的值大于j+1的值,就交换它们的值if(arr[i]>arr[j+1]){temp = arr[j];arr[j]= arr[j+1];arr[j+1]= temp;}}}//输出排序后的数组元素序列System.out.println("数组元素排序后的序列是:")//循环遍历输出数组元素的值for(i=0;i+ +){System.out.println(arr[i]+"")}}}
程序运行结果为:
数组元素排序前的序列是11 22 3 44 55数组元素排序后的序列是:3 11 22 44 55
#冒泡排序法就是依次将相邻的元素进行比较,如果前面的元素比后面的元素值大,就交换它们的值。
#每一次对数组进行遍历都可以找到现有数字中最大的数,当本次遍历完成后,该数会被“冒泡”到最后一位,最终在多次遍历后完成排序。

(从基础背景开始学起,坚持,是一件不容易的事情。)

文章推荐
AI基础学习第二阶段笔记:从0开始学Java“搭建Java程序开发环境”
AI基础学习第二阶段笔记:从0开始学Java“开发第一个Java应用程序”
文 | Lisa Notes
Lisa Notes |一个Lisa’s notes:生活、工作、学习中那些事儿,感悟自我成长,随心随笔杂谈。微信搜索「Lisa Notes」(ID:Lisa-notes),查看更多信息,原创小说,PPT干货分享。

长按♥一键关注
特别声明
本文为自媒体、作者等在微信公众号上传并发布,仅代表作者观点,不代表微信公众号的观点或立场,微信公众号仅提供信息发布平台,最终解释权归本人所有。合作请联系13698281600@163.com。
全世界只有不到0.03%的人
关注小SA
你真是个特别的人
快戳我!快戳我!快戳我!㊋㊋㊋