Java程序设计基础笔记 • 【第6章 循环结构进阶】
全部章节 >>>>
本章目录
6.1 for循环
6.1.1 for循环的简介
回顾问题:输出100次“我爱你!”
for比while的代码更简洁,for语句封装了循环的4要素。

6.1.2 for循环的使用
示例:使用for循环实现求1~100的和

int sum =0;
for (int i = 1; i<= 100; i++) {
sum += i; //累加求和
}
System.out.println("1~100的和为"+sum);
示例:输入一个学生姓名和5门课程成绩,求其总成绩

//通过循环依次接收每门课程成绩
for (int i = 1; i <= 5; i++){
System.out.printf("请输入第%d门课程成绩:\n", i);
score = sc.nextInt();
sum += score;//累加
}
System.out.printf("%s同学本次考试总成绩:%d", name, sum);
6.1.3 for循环的表达式
循环次数与循环控制变量的关系:
|
循环控制变量的初值 |
循环条件 |
循环控制变量改变 |
循环次数 |
|
int i = 0 |
i < 5 |
i++ |
5 |
|
int i = 0 |
i <= 4 |
i++ |
5 |
|
int i = 5 |
i > 0 |
i-- |
5 |
|
int i = 4 |
i >= 0 |
i-- |
5 |
示例:输入一个数字求其加法表

Scanner input = new Scanner(System.in);
System.out.println(" 请输入一个数字 :");
int num = input.nextInt();
System.out.println(" 数字 "+num+" 的加法表如下 :");
for (int i = 0,j = num; i<=num; i++,j--) {
System.out.printf("%d + %d = %d\n",i,j,num);
}
for循环常见问题:
(1)省略表达式1,如for;表达式2;表达式3)。表达式1用于对循环控制变量进行初始化,省略for循不的表达式1,不会出现语法错误,我们可以将循环控制变量初始化放置到for循环之前。例如:
int i=1;
for(; i<=5; i++) {
System.out. printin( "Hello Java!" );
}
(2)省略表达式2,如for(表达式1;表达式3)。表达式2用于判断循环条件是否成立,省略表达式2后,即没有循环判断,循环条件永远为真。此时,循环将出现死循环。例如:
for(int i = 1; ; i++){
System.out.printIn( "Hello Java!" );
}
(3)省略表达式3,如for( 表达式1;表达式2;)。表达式3用于修改循环控制变量的值,省略表达式3后,循环控制变量的值不会变化,这样会导致循环永远为真,出现死循环。为了避免出现死循环,可以将表达式3放置于循环操作中,以达到未省略表达式3的效果。例如:
for(int i =0; i < 5;){
System.out.printin( "Hello Java!" );
i++;
}
(4)省略所有的表达式,如for(; ;)o省略for循环的三个表达式后,该循环则为死循环,想要结束死循环可以通过跳转语句实现。省略for循环的表达式后,不会导致程序的语法错误,但是程序的结构不够清晰,不便于阅读与维护。建议使用for循环时尽量不省略任何一一个表达式。
6.1.4 实践练习
6.2 深入理解for循环(一)
6.2.1 for循环案例(一)
(1)表达式:声明变量num用于储蓄用户输入的数字,找查能够整除num的数字,需从1开始直到num-1为止,因此,声明变量i作为循环控制变量,for循环结构中的3个表达式如下:
表达式1:int i = ;
表达式2:i < num
表达式3:i++
(2)循环操作:重复执行的操作是逐一判断1、2、3、.... num-1,能否被num整除,若能够被整除,则将对应数字进行累加。因此,声明变量sum,用于存储累加值,设置初始值为0,由于需要从1开始进行判断,而1的初始值也为1,此时,只需将i反复与num进行整除判断即可,将能整除num的i累加至sum中。
示例:在控制台中输入一个自然数,判断该数字是否为完全数。完全数,又称完美数,是指能整除该数字的所有数字(除本身外)之和等于本身的数字。

// 使用循环,在 1 ~ num-1中查找能整除 num的数字
for (int i = 1; i < num; i++) {
// 若能够整除 num,则进行累加
if (num % i == 0)
sum += i;
}
if (sum == num) // 若累加之和与 num相等,则为完全数
System.out.printf("%d 是完全数 \n", num);
else
System.out.printf("%d 不是完全数 \n", num);
6.2.2 求水仙花数
示例:在控制台中输出100~999之间所有的“水仙花数”。水仙花数是指各位数字的3 次幂之和等于本身的数字。例如:数字153。

for (int i = 100; i < 1000; i++) {
// 分离个位数字
int s = i%10;
int t = i/10%10;
int h = i / 100;
// 判断是否为水仙花数
if (i == s * s * s + t * t * t + h * h * h)
System.out.println(i);
}
6.2.3 实践练习
6.3 深入理解for循环(二)
6.2.1 三种循环的区别
(1)区别1:语法
(2)区别2:执行顺序
while 循环:先判断,再执行
do-while循环:先执行,再判断
for循环:先判断,再执行
(3)区别3:适用情况
循环次数确定的情况,通常选用for循环
循环次数不确定的情况,通常选用while或do-while循环
6.3.2 各种循环的使用场景
思考:年存款利率为3%, 本金为10000元,当存款总额超过 12000 元时,收益具体是多少 ?
分析:
需求:该业务可以转换为“当”存款总额小于12000元时,以3%利率增长。
条件:存款 < 12000。
结论:不明确循环次数,也无序先执行循环体,则用while循环
示例:年存款利率为3%, 本金为10000元,当存款总额超过 12000 元时,收益具体是多少 ?

double total = 10000;// 起始余额
double income;// 收益
while (total <= 12000) {
total = total + (total * 0.03); // 增加收益后的余额
}
income = total - 10000; // 收益赋值
System.out.printf(" 收益为 %.2f ", income);
思考:西游记中,孙悟空让猪八戒挑水,直到孙悟空满意为止。
分析:
需求:孙悟空让猪八戒挑水,猪八戒在每次挑完水后询问孙悟空还需要挑水与否,直到孙悟空说不用挑水为止。
条件:孙悟空说需要挑水。
结论:不明确循环次数且需要在执行一次后再次询问,所以使用do-while
示例:西游记中,孙悟空让猪八戒挑水,直到孙悟空满意为止。

do{
count++;
System.out.printf(" 猪八戒挑了第 %d 桶水后。\n",count);
System.out.println(" 猴哥,还要继续挑水吗? [y/n]");
answer = sc.next().charAt(0);
}while(answer == 'y' || answer == 'Y');
System.out.printf(" 猪八戒一共挑了 %d桶水后,停止了挑水工作。",count);
经验:
如果业务中可以获取到一个确切的循环次数,可以考虑用for循环,简而言之就是如果明确知道要重复几次做同样的事情,则使用 for 循环。
for语句场景:如果存在一个确切循环次数时,优先选择for循环实现。
在选择循环结构时,不是只有某种循环才能解决问题,而是优先选择对应的循环会使得代码更简单,业务处理更方便。
6.3.3 实践练习
6.4 跳转语句
- Java语言支持3种形式的跳转语句:break语句、continue语句和return语句。
- 循环结构中,常用的是:break语句和continue语句。
6.4.1 break语句
break:改变程序控制流程
用于do-while、while、for中时,可跳出循环而执行循环后面的语句

示例:输入一个区间,找出区间中第一个能够被3整除的数字。

Scanner sc = new Scanner(System.in);
int start, end;//区间
System.out.println("请输入一个区间:");
start = sc.nextInt();
end = sc.nextInt();
System.out.println("区间中能够被3整除的第一个数字:");
for (int i = start; i <= end; i++) {
if (i % 3 == 0) {
System.out.println(i);
break;//跳出循环结构
}
}
System.out.println("查找结束");
6.4.2 continue语句
continue:只能用于循环中
continue作用:跳过循环体中剩余的语句而执行下一次循环

示例:编写Java程序,累加1~99数字之和,要求跳过各位中含有3的数字。

int sum = 0;
for (int i = 1; i < 100; i++) {
int s = i % 10;//分割个位
int t = i / 10;//分割十位
if (s == 3 || t == 3)
continue;//进入下次循环
sum += i;//累加满足条件的数据
}
System.out.println("1~99之间各位中不包含3的数字之和:" + sum);
6.4.3 实践练习
总结:
- for循环中的表达式2称为条件表达式,用于判断for循环的条件是否成立,通常为关系表达式或逻辑表达式。
- for循环中的表达式3称为修改表达式,用于修改循环控制变量的值,通常对循环变量进行自增或自减操作。
- break语句可以在循环结构中使用,用于跳出循环,即提前结束循环。
- continue语句只能在循环结构中使用,用于终止本次循环,并且跳转至下一次循环。
Java程序设计基础笔记 • 【第6章 循环结构进阶】的更多相关文章
- Java程序设计基础笔记 • 【目录】
持续更新中- 我的大学笔记>>> 章节 内容 实践练习 Java程序设计基础作业目录(作业笔记) 第1章 Java程序设计基础笔记 • [第1章 初识Java] 第2章 Java程序 ...
- Java 第8章 循环结构进阶
循环结构进阶 什么是二重循环? 二重循环的执行顺序是什么?
- Java程序设计基础笔记 • 【第5章 循环结构】
全部章节 >>>> 本章目录 5.1 while循环结构 5.1.1 循环简介 5.1.2 while循环 5.1.3 while循环的使用 5.1.4 while循环的注 ...
- Java程序设计基础笔记 • 【第10章 数组】
全部章节 >>>> 本章目录 10.1 数组概述 10.1.1 数组优势 10.1.2 Java中的数组 10.1.3 数组的分类 10.2 一维数组 10.2.1 数组的 ...
- Java程序设计基础笔记 • 【第9章 方法与参数类型】
全部章节 >>>> 本章目录 9.1 有参数有返回值的方法 9.1.1 有参数有返回值的方法的定义和调用 9.1.2 返回值的传递过程 9.1.3 方法返回值的注意事项 9 ...
- Java程序设计基础笔记 • 【第1章 初识Java】
全部章节 >>>> 本章目录 1.1 程序的概念及Java语言介绍 1.1.1 生活中的程序 1.1.2 计算机程序 1.1.3 算法和流程图 1.1.4 实践练习 1.2 ...
- Java程序设计基础笔记 • 【第4章 条件结构】
全部章节 >>>> 本章目录 4.1 条件结构 4.1.1 程序流程控制 4.1.2 单分支if结构 4.1.3 双分支if结构 4.1.4 实践练习 4.2 多重条件结 ...
- Java程序设计基础笔记 • 【第7章 Java中的类和对象】
全部章节 >>>> 本章目录 7.1 理解类和对象 7.1.1 对象 7.1.2 抽象与类 7.1.3 类与对象的关系: 7.2 Java中的类和对象 7.2.1 类的定义 ...
- 【Java】《Java程序设计基础教程》第一章学习
一.Java概述 1.介绍了Java语言的由来 2.Java语言的特点:简单.面向对象.分布式.高效解释执行.健壮.安全.结构中立.可移植.高效率.多线程.动态 3.Java语言的实现机制,引入虚拟机 ...
随机推荐
- db9串口接头的定义
这个接头都是以公头为准,所有接头还是以公头去记. RS-232端(DB9公头/针型)引脚定义 2: RXD 3:TXD 5:GND 1/4/6:内部相链接 7/8 :内部相链接 1.RS-232端 ...
- Linux下删除的文件如何恢复
Linux下删除的文件如何恢复 参考自: [1]linux下误操作删除文件如何恢复 [2]Linux实现删除撤回的方法 以/home/test.txt为例 1.df -T 文件夹 找到当前文件所在磁盘 ...
- Stream collect Collectors 常用详细实例
返回List集合: toList() 用于将元素累积到List集合中.它将创建一个新List集合(不会更改当前集合). List<Integer> integers = Arrays.as ...
- 解决springboot序列化 json数据到前端中文乱码问题
前言 关于springboot乱码的问题,之前有文章已经介绍过了,这一篇算是作为补充,重点解决对象在序列化过程中出现的中文乱码的问题,以及后台报500的错误. 问题描述 spring Boot 中文返 ...
- Bash shell(六)-管道命令
就如同前面所说的, bash 命令执行的时候有输出的数据会出现! 那么如果这群数据必需要经过几道手续之后才能得到我们所想要的格式,应该如何来设定? 这就牵涉到管线命令的问题了 (pipe) ,管线命令 ...
- Function overloading and const keyword
Predict the output of following C++ program. 1 #include<iostream> 2 using namespace std; 3 4 c ...
- 【Linux】【Shell】【text】sed
sed [OPTION]... 'script' [input-file] ... script: 地址定界编辑命令 ...
- 【Java 8】Stream.distinct() 列表去重示例
在这篇文章里,我们将提供Java8 Stream distinct()示例. distinct()返回由该流的不同元素组成的流.distinct()是Stream接口的方法. distinct()使用 ...
- 商城项目的购物车模块的实现------通过session实现
1.新建购物车的实体类Cart public class Cart implements java.io.Serializable{ private Shangpin shangpin;//存放商品实 ...
- [BUUCTF]REVERSE——Java逆向解密
Java逆向解密 附件 步骤: 根据题目提示是java语言编写的程序,用jd-gui反编译一下 百度了一些java里的函数后读懂了这段程序的意思,将我们输入的字符串依次+'@',然后跟32异或,得到K ...
