不闲聊!!!不扯淡!!!小UP只分享Java相关的资源干货

Java for循环语句

在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。一组被重复执行的语句称之为循环体,能否继续重复,取决于循环的终止条件。循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。循环语句是由循环体及循环的终止条件两部分组成的。

为了帮助大家理解循环语句存在的意义,我们来看一段代码:

System.out.println("hello world!");
System.out.println("hello world!");
System.out.println("hello world!");
System.out.println("hello world!");
System.out.println("hello world!");
System.out.println("hello world!");
System.out.println("hello world!");
System.out.println("hello world!");
System.out.println("hello world!");
System.out.println("hello world!");
//...
//...

以上程序的业务背景是:输出100行“hello world!”,如果我们像以上方式进行代码编写的话,代码将无法得到重复使用,大家也可以看到“System.out.println("hello world!")”这行代码重复出现,直到输出100个为止。显然程序应该找一种更好的实现方式,这个时候我们就可以借助java语言中的循环语句来实现了。

java中的循环语句共包括三个,分别是:for循环、while循环、do..while循环,接下来我们先来学习for循环。

for循环的语法格式如下图所示:

图6-13:for循环语法结构

对以上for循环语法结构进行说明:初始化表达式最先执行,并且在整个循环当中初始化表达式只执行一次,布尔表达式结果是true或者false,true表示循环可以继续执行,false表示循环结束,循环体当中的代码就是需要反复执行的代码,更新表达式一般是用来更新某个变量的值,更新操作之后可能布尔表达式的结果就不再是true了。那么for循环的执行顺序以及原理如下图所示:

图6-14:for循环语句执行顺序及原理

对于for循环来说,初始化表达式、布尔表达式、更新表达式都不是必须的,当布尔表达式缺失的时候,没有条件控制的前提下,会形成死循环,我们来看一下最简单的for循环形式:

for(;;){System.out.print("死循环、");
}

执行结果如下图所示:

图6-15:死循环输出结果

最常见的for循环是怎样的呢?看以下代码:

for(int i = 1; i <= 10; i++){System.out.println("i = " + i);
}

运行结果如下图所示:

图6-16:for循环输出1~10

对以上代码进行分析:首先执行int i = 1,并且只执行一次,定义初始化变量i,赋值1,然后判断i <= 10结果为true,则执行循环体打印i = 1,循环体结束之后,执行i++,然后i变成了2,继续判断i <= 10结果为true,则执行循环体打印i = 2,如此循环执行,直到打印i = 10之后,再执行i++让i变成了11,然后判断i <= 10结果为false,循环结束,这样就完成了1~10的输出,当然程序不是固定的,大家也可以把条件i <= 10修改为i < 11,这样也是可以的。

关于for循环的使用我们还需要注意初始化变量的作用域,在for循环当中声明的变量只在for循环中有效,当for循环结束之后,初始化变量的内存就释放了/消失了,所以在for循环之外是无法访问该变量的,例如以下代码在编译的时候就会报错了:

//在for循环内部声明的变量i只在for循环中可见/有效
for(int i = 1; i <= 10; i++){System.out.println("i = " + i);
}
//这行编译报错,i变量不存在
System.out.println("i = " + i);

当然,这样写就不会报错了:

public static void test(){//变量的声明位置放到了for循环之外int i = 1;for(; i <= 10; i++){System.out.println("i = " + i);}//这里就可以访问变量i了System.out.println("i = " + i);
}

为什么这样写就可以了呢?那是因为i变量的作用域已经被扩大了,不再只是for循环中可以使用,for循环之外也可以使用,换句话说,以上的for循环结束之后i变量的内存并不会被释放。后续的程序可以继续使用。i变量的作用域是在整个test()方法中都有效,直到test()方法执行结束的时候才会释放i变量的内存空间。

接下来我们再来看看for循环还有哪些其它的写法:

for(int i = 10; i > 0; i--){System.out.println("i = " + i);
}
System.out.println("-------------分割线---------------");
for(int i = 10; i > 0; i -= 2){System.out.println("i = " + i);
}
System.out.println("-------------分割线---------------");
for(int i = 100; i >= 10; i /= 3){System.out.println("i = " + i);
}

以上程序运行结果,请看下图:

图6-17:for循环的其它编写方式执行结果

接下来,我们再使用for循环实现1~100所有数字的求和,实现思路是:定义变量i,初始值从1开始,每循环一次加1,这样就可以取到1~100的每一个整数了,那么求和怎么做呢?求和就是将1~100的每一个整数累加,这必然需要提前定义一个变量,使用变量实现累加,例如:a += 1,a += 2,a += 3...,代码如下所示:

int sum = 0;
for(int i = 1; i <= 100; i++){sum += i;
}
System.out.println("sum = " + sum);

运行结果如下所示:

图6-18:1~100所有整数求和

通过以上程序我们可以学到什么?编程语言当中的累加可以使用扩展类赋值运算符+=来实现,另外sum变量为什么定义到for循环外面,而不是定义到循环体当中呢?那是因为当定义到循环体内之后,每一次循环体在执行的时候,都会重新定义sum变量,这样会让sum变量归0,无法达到累加的效果。

接下来,我们在以上程序的基础之上实现1~100所有奇数的和,编程思路是:在累加之前先判断变量i是否为奇数,如果是奇数则累加,这就需要在sum += i外面套一个if语句进行控制,代码如下所示:

int sum = 0;
for(int i = 1; i <= 100; i++){if(i % 2 != 0){sum += i;}
}
System.out.println("sum = " + sum);

运行结果如下所示:

图6-19:1~100所有奇数和的执行结果

其实以上的方式是将每一个数字取出来,然后再判断是否为奇数,这种方式会导致循环次数达到100次,实际上可以换成另外一种解决方案,假设从1开始,每次累加2,那么每次取出的数字为1,3,5...,这样正好每次取出的数字都是奇数,可以直接累加了,这样循环的次数基本上会减半,效率则提高了,这种代码既优雅,又高效。请看以下代码:

int sum = 0;
for(int i = 1; i < 100; i += 2){sum += i;
}
System.out.println("sum = " + sum);

运行结果如下所示:

图6-20:1~100所有奇数和的执行结果

以上演示的所有循环都是单层的,循环当中可以嵌套循环吗?答案是:当然可以,之前我们就说过所有控制语句都是可以嵌套使用的,当循环A中嵌套循环B的时候就等于在A循环体中的代码是B循环。其实大家在学习循环嵌套的时候完全没必要特殊化对待,完全可以把A循环体当中的B循环看做是一段普通的java代码。接下来我们看一段代码:

//循环5次(B循环)
for(int i = 1;i <= 5; i++){System.out.print("i = " + i + ",");
}System.out.println();//循环2次(A循环)
for(int j = 1;j <= 2; j++){System.out.print("j = " + j + ",");
}System.out.println();//将B循环放到A循环体当中
for(int j = 1;j <= 2; j++){ //A循环(2次)for(int i = 1;i <= 5; i++){ //B循环(5次)System.out.print("i = " + i + ",");}
}

运行结果如下图所示:

图6-21:for循环嵌套

分析以上for循环嵌套,请看下图:

图6-22:for循环嵌套分析

分析循环嵌套的小窍门,如下图所示:

图6-23:for循环嵌套小窍门

学习了for循环嵌套的使用,我们一起来写一下经典的九九乘法表,九九乘法表的结构大家还记得吗,我们一起来回顾一下小学的知识(嘿嘿):

图6-24:九九乘法表结构

通过观察九九乘法表结构我们可以看出来它有9行,所以可以得出一定需要以下代码:

public static void main(String[] args) {for(int i = 1; i <= 9; i++){System.out.println("i = " + i);}
}

运行结果如下:

图6-25:九九乘法表9行

运行结果如下:

图6-25:九九乘法表9行

观察上图我们可以得出i是行号,那么再次观察九九乘法表的规律得知,第1行1个式子,第2行2个式子,第3行3个式子...,第9行9个式子,那么结论是第i行有i个式子,以上循环确定为外层循环,共循环9次,外层循环每循环一次要保证能够输出九九乘法表的1整行。那么输出九九乘法表1整行的时候又需要一个循环进行控制,而且这个循环被放到内部,循环的次数随着行号的变化而变化。代码如下所示:

for (int i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {System.out.print(i * j + " ");}System.out.println();}

运行结果如下所示:

图6-26:九九乘法表每个表达式的执行结果

分析以上代码,请看下图:

图6-27:分析九九乘法表程序

接下来我们在每一个“结果”前添加“i * j = ”,代码如下所示:

for (int i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {System.out.print(i + "*" + j + "=" + i * j + " ");}System.out.println();}

运行结果如下所示:

图6-28:九九乘法表运行结果

通过以上代码的学习,需要每位读者能够掌握什么是循环,为什么要使用循环,for循环的语法结构是什么,for循环的执行顺序以及原理是什么,嵌套的for循环又应该怎么理解,大家也可以挑战一下三层for循环嵌套,或者更多。总之for循环在实际开发中使用非常频繁,大家务必掌握。

学习本文之前建议先看:

Java十四天零基础入门-Java switch选择语句​zhuanlan.zhihu.com

下一篇文章学习地址:

Java十四天零基础入门-Java while循环语句​zhuanlan.zhihu.com

更多相关Java视频教程资料:

2020最新版Java视频学习路线图-学习Java独孤九剑总纲篇​zhuanlan.zhihu.com

你的素质五连就是小UP的动力

java循环语句_Java十四天零基础入门-Java for循环语句相关推荐

  1. Java从键盘输入n行字符串_Java十四天零基础入门-Java布尔类型

    不闲聊!!!不扯淡!!!小UP只分享Java相关的资源干货 Java布尔类型 在Java语言中布尔类型的值只包括true和false,没有其他值,不包括1和0,布尔类型的数据在开发中主要使用在逻辑判断 ...

  2. java短除法获取二进制_Java十四天零基础入门-Java的数据类型介绍

    不闲聊!!!不扯淡!!!小UP只分享Java相关的资源干货 本章节目标: 理解数据类型的作用.Java中包括哪些数据类型?常见的八种基本数据类型都有哪些?会用八种基本数据类型声明变量?什么是二进制?原 ...

  3. 假赋值java_Java十四天零基础入门-Java赋值运算符

    不闲聊!!!不扯淡!!!小UP只分享Java相关的资源干货 Java赋值运算符 赋值运算符目前也是只需要掌握=.+=.-=.*=./=.%=,其它和二进制相关的内容也是到后面遇到的时候再详细学习.赋值 ...

  4. 视频教程-由浅入深Java零基础入门-Java

    由浅入深Java零基础入门 负责过多个软件项目的研发.设计和管理工作,拥有项目管理师认证.项目监理师中级认证.出版过的图书有<微信小程序开发图解案例教程><Axure RP8原型设计 ...

  5. 【JAVA学习】1、零基础入门Java 基础语法:概念、规则、格式

    [JAVA学习]1.零基础入门Java 基础语法 前言 JAVA开发环境选择 Java 基础概念 Java 标识符 Java修饰符 基础代码模板框架 命名规则 基础规则 后端开发规则 代码格式 前言 ...

  6. Java好学吗?零基础入门Java,三个就业方向实现月入过万!

    Java好学吗?零基础入门Java容易吗?据统计,这是很多人学习前最常问也是最关心的问题之一. 不可否认,大家在开始接受新事物的时候都会陷入困境,但学习是循序渐进的,零基础入门Java到底难不难,只有 ...

  7. python 循环语句结果存储_【零基础学Python】循环语句

    while循环语句 可以使用while语句一遍又一遍的执行代码块.只要while语句的条件为True,子句的代码就会执行下去.在代码中,一条while语句始终包含以下内容: while关键字 条件(即 ...

  8. Java学习记录_1:MOOC《零基础学Java语言》课后习题解

    Hey,我是寒水,一名大二学生,电子商务专业在读,正在学习Java中.我试图将在Java学习中遇到的一些困惑和最终的解答发在这个账号上,希望以此来激励我不要放弃学习! 在学习记录这个专题中,我收藏一些 ...

  9. c语言用if语句abc输出最大值,C语言基础入门选择结构-if语句(78页)-原创力文档...

    C语言基础入门选择结构-if语句_电脑基础知识_IT/计算机_专业资料.第9单元选择结构-if语句<程序设计基础>北京八维研修学院第1节选择结构导入?... <程序设计基础> ...

  10. android 循环输出字母,042 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 04 案例演示while循环的使用——循环输出英文字母...

    NOIP2015跳石头[二分答案] 题目背景 一年一度的"跳石头"比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选 择好了两块岩 ...

最新文章

  1. 【视频教程】JEECG 入门视频教程大全+历史版本号代码下载
  2. C++存储和处理字符串
  3. skb_shinfo(skb)-dataref 含义
  4. B06_NumPy 切片和索引
  5. vue 学习之路 —— 图片的引入
  6. 任何傅里叶级数展开和卷积可以参考一下页面
  7. 磁盘管理,quota,RAID,LVM
  8. k8s 您的连接不是私密连接_直插式声测管是不是承插式?如何连接?
  9. 动手学PyTorch知识点汇总
  10. android 新建签名文件注意事项
  11. Unity EasyAR图像跟踪
  12. 获取用户的openid与遇到的errcode:40029与errcode:40125,errmsg
  13. task5b-验证lncRNA只有部分具有polyA尾结构
  14. 9.群智能算法及其应用: 粒子群优化算法及应用, 蚁群算法及其应用
  15. 被诸葛亮的光环掩盖起来的三国英雄
  16. grub2命令 linux启动盘,Grub2 制作多系统U盘启动
  17. 计算机二级打字的速度有要求么,打字速度几个要求和技巧
  18. CAD怎么设置十字光标大小?CAD十字光标设置
  19. 分析一个简单的汇编代码
  20. STM32L0 内部EEPROM写读

热门文章

  1. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第3节 maven标准目录结构和常用命令_07maven常用命令...
  2. 【Leetcode_easy】724. Find Pivot Index
  3. git error: failed to push some refs to...
  4. [SDOI2010]代码拍卖会
  5. UGUI ScrollRect使用
  6. 模拟--滑动窗口最大值
  7. liunx服务程序的安装及配置
  8. Mac下安装第三方模块报错:‘sqlfront.h‘ file not found的解决办法
  9. 网络爬虫(2)--异常处理
  10. OpenStack 企业私有云的若干需求(2):自动扩展(Auto-scaling) 支持