java中循环流程的语句有哪些(java语言中循环的种类以及用法)
- for循环
- while循环
- do...while循环
- 控制跳转语句
1、循环的概述
2、Java中循环的分类
3、for循环的格式
4、for循环的执行流程
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句。
1.2.2 Java中循环分类- for循环
- while循环
- do...while循环
for (初始化语句;条件判断语句;条件控制语句) {
循环体语句;
}
格式解释:
- 初始化语句: 用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样
- 条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去
- 循环体语句: 用于表示循环反复执行的内容,简单说就是循环反复执行的事情
- 条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去
①执行初始化语句
②执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
③执行循环体语句
④执行条件控制语句
⑤回到②继续
1.3 注意事项
1.for循环初始化语句定义变量的作用范围:定义的()以及{}内,出了这个范围就失效
2.循环 { } 中定义的变量,在每一轮循环结束后,都会从内存中释放
3.循环 ( ) 中定义的变量,在整个循环结束后,都会从内存中释放
示例代码:
for (int i = 1; i <= 5; i ) {
int a = 10;
System.out.println(a);
}
//System.out.println(i); 循环外面是无法输出的
//System.out.println(a); 循环外面是无法输出的
4.循环语句 ( ) 和 { } 之间不要写分号
for (int i = 1; i <= 5; i ); {
System.out.println("HelloWorld");
}
5.条件控制语句的使用。条件控制语句别名:步进语句
i 一次增加1
i-- 一次减少1
i =2 一次增加2
int a=1;
for(System.out.println("a"); a<=3; System.out.println("c"),a ){
System.out.println("b");
}
//控制台打印结果是多少
示例代码:
1 正向
for(int i = 1; i <= 5; i ){
System.out.println(i);
}
2 反向
for(int i = 5; i >= 1; i--){
System.out.println(i);
}
示例代码:
//定义求和变量
int sum = 0;//串羊肉串,你需要一根签子,上面肯定啥也没有
//1.定义求和变量sum,初始化值为0,
//作用:将1-5之间的每一个数据累加到sum上进行求和操作
int sum = 0;
//2.循环1-5,每循环一次,获取一个数据值
for(int i = 1; i <= 5; i ){
//3.累加求和
//sum = sum i;
//简化操作
sum = i;
}
//4.输出结果
System.out.println("数据1-5的和为:" sum);
需求:求1-100之间的偶数和,并把求和结果在控制台输出
示例代码:
//传统写法
//1.定义求和变量sum,初始化值为0
int sum = 0;
//2.循环1-100,每循环一次,获取一个数据值
for(int i = 1; i <= 100; i ){
//3.判断当前循环中变量i保存的数据值是不是偶数
if(i % 2 ==0){
//4.是偶数进行累加求和
sum = i;
}
}
//5.循环结束,数据求和完毕,打印求和结果
System.out.println("数据1-100的偶数和为:" sum);
//改进写法
//1.定义求和变量sum,初始化值为0
int sum = 0;
for(int i = 0; i <= 100; i =2){//0 2 4 6
sum = i;
//System.out.println("数据1-100的偶数和为:" sum);
//输出sum放在循环中打印的是求和的过程
}
//注意:把求和变量定义在循环中
for(int i = 1; i <= 5; i ){
int sum = 0;//在循环中,每循环一次,重新定义一次sum并初始化值为0
sum = i;
System.out.println(sum);
}
/*奇数
for(int i = 1; i <= 100; i =2){//1 3 5 7
}
*/
需求:在控制台输出所有的”水仙花数“
解释:什么是水仙花数?
水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数
例如:153 3 * 3 * 3 5 * 5 * 5 1 * 1 * 1 = 153
分析:
- 水仙花数是一个三位数
- 水仙花数的个位、十位、百位的数字立方和等于原数
- 获取所有的三位数,准备进行筛选,最小的三位数为100,最大的三位数为999,使用for循环获取
- 需要判定,获取每一个三位数的个位,十位,百位,做if语句判断是否是水仙花数
示例代码:
//1.for循环从100开始到999结束,每循环一次获取一个三位正整数
for(int i = 100; i <= 999; i ){
//2.循环内获取当前i保存的数据值的个位十位百位
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100;
//3.判断是否满足水仙花数的条件
if(ge*ge*ge shi*shi*shi bai*bai*bai == i){
//4.打印水仙花数
System.out.println(i);
}
}
需求:在控制台输出所有的“水仙花数”,要求每行打印2个
解释:
- 不换行打印,去掉ln
- System.out.print("打印内容");
- 换行打印
- System.out.println();//不加内容只起到换行的作用
- 计数器的使用
- 需要在循环外面定义统计变量(计数器)
- 用来统计已经打印了多少个水仙花数
- 根据当前打印的数量控制换行
分析:
- 定义变量count,用于保存“打印过”的数量,初始值为0
- 在判定和打印水仙花数的过程中,不换行,并在打印后让count变量 1,记录打印过的数量
- 在每一次count变量 1后,判断是否到达了2的倍数,是的话,换行。
public static void main(String[] args){
// 1. 定义一个计数器,初始值为0
int count = 0;
// 2.for循环从100开始到999结束,每循环一次获取一个三位正整数
for(int i = 100; i <= 999; i ){
// 3.循环内获取当前i保存的数据值的个位十位百位
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 10 / 10 % 10;
// 4.判断是否满足水仙花数的条件
if( (ge*ge*ge shi*shi*shi bai*bai*bai) == i){
// 不换行打印水仙花数
System.out.print(i " ");
// 每打印一次水仙花数记录一次
count ;
// 判断当前打印的是第几次
if(count % 2 == 0){//2 4 6 8..
System.out.println();//换行
}
}
}
}
总结:今后如果需求带有统计xxx,请先想到计数器变量
7、while循环7.1 问题
1、格式
2、执行流程
初始化语句;
while (条件判断语句) {
循环体语句;
条件控制语句;
}
①执行初始化语句
②执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
③执行循环体语句
④执行条件控制语句
⑤回到②继续
示例代码:
public class WhileDemo {
public static void main(String[] args) {
//需求:在控制台输出3次 黑马程序员
//while循环实现
int j = 1;
while(j<=3) {
System.out.println("黑马程序员");
j ;
}
}
}
- while循环初始化语句定义变量的作用范围
- while循环的初始化语句定义在循环的外面;循环结束之后,变量仍然能够被使用
- 不要丢失条件控制语句,否则可能会造成死循环
需求:
世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。 请问,我折叠多少次,可以折成珠穆朗玛峰的高度?
分析:
- 因为要反复折叠,所以要使用循环,但是不知道折叠多少次,这种情况下更适合使用while循环
- 循环的执行过程中每次纸张折叠,纸张的厚度要加倍,因此需要先定义纸张厚度,在循环中使厚度加倍
- 折叠的过程中当纸张厚度大于珠峰就停止了,因此继续执行的要求是纸张厚度小于珠峰高度
- 设置一个计数器,在循环中执行累加,对应折叠了多少次
示例代码
//1.定义计数器count,初始值为0
int count = 0;
//2.使用while循环,直到折叠厚度达到珠峰高度为止
double paper = 0.1;
while(paper <= 8844430){
paper *= 2;//条件控制语句,纸张厚度每次折叠是原来的2倍
count ;
}
//输出结果
System.out.println("一共需要折叠" count "次");
练习:
for循环改写珠穆朗玛峰
//for循环改写珠穆朗玛峰案例
//1.定义计数器count,初始值为0
int count = 0;
for(double paper = 0.1; paper <= 8844430 ;paper *= 2){
//条件控制语句,纸张厚度每次折叠是原来的2倍
count ;
}
//输出结果
System.out.println("一共需要折叠" count "次");
1、do...while格式
2、do...while执行流程
3、do...while特点
初始化语句;
do {
循环体语句;
条件控制语句;
}while(条件判断语句);
① 执行初始化语句
② 执行循环体语句
③ 执行条件控制语句
④ 执行条件判断语句,看其结果是true还是false
如果是false,循环结束;如果是true,继续执行
⑤ 回到②继续
示例代码:
public class DoWhileDemo {
public static void main(String[] args) {
//do...while循环实现
int j = 1;
do {
System.out.println("HelloWorld");
j ;
}while(j>=5);
}
}
无论条件判断语句结果是否为true,都要执行一次循环体
10、三种循环的区别10.1 问题
1、三种循环的区别
2、for和while的区别以及使用场景
for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
do...while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
10.2.2 for和while的区别以及使用场景区别:
条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
使用场景:
- for:明确循环次数,使用for
- while:不明确循环次数,但是知道什么时候结束
- do...while:基本不用
注意:
手动改写 for 循环格式后,将不存在区别,for 循环能够实现的 while 都能实现,反之也一样
int i = 0;
for(; i < 4; i ;) {
}
System.out.println(i); // 正常使用
for循环补充:
//for循环的变换写法
int i=0;
for(;i<10;i ){//第一个部分可以省略
System.out.println("123");
}
for(int i=0;;i ){//死循环 如果省略循环条件 那么系统默认为true;
System.out.println("123");
}
for(int i=0;i<10;){//死循环
System.out.println("123");
//i ;//也可以写在这里
}
for(;;){//都能省略 死循环
System.out.println("123");
}
1、死循环的格式
2、死循环的注意点
for(;;){}
while(true){}
do{}while(true);
注意:while的死循环格式是最常用的
11.2.2 死循环的注意点死循环单独使用没有意义(不能单独书写在那里),需要配合跳转控制语句来使用(当达到某种条件的时候去结束死循环)
//举例:录入数据1-100,输入错误需要重新输入直到正确为止
int num = sc.nextInt();
while(true){
if(num >= 1 && num <= 100){
//使用某个语句结束循环
}else {
//不满足条件就重新录入
num = sc.nextInt();
}
}
//结束循环到这里,使用正确的数据
1、概述
2、分类
跳转控制语句是用于在循环的过程中,控制循环运行的。
12.2.2 分类continue 【跳过】某次循环体内容的执行,继续下一次的执行
break 【终止】循环体内容的执行,也就是说结束当前的整个循环
注意:break可以用于分支语句switch中,执行对应的case匹配项之后用来结束switch语句
示例代码:
// continue
public static void main(String[] args) {
for (int i = 1; i <= 24; i ) {
if(i == 4){
continue;
}
System.out.println(i "层到了");
}
}
// break
public static void main(String[] args) {
for (int i = 20; i <= 80; i ) {
if(i == 60){
break;
}
System.out.println(i "层到了");
}
}
需求:
程序运行后,用户可多次查询星期对应的减肥计划,直到输入0,程序结束
实现思路:
① 业务功能是多次进行,此处需要循环
② 不明确循环次数,采用while循环
③ 匹配到0的时候,使用break结束循环
import java.util.Scanner;
public class Test{
public static void main(String[] args){
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
loop:while(true){
System.out.println("请输入您要查看的星期数:");
System.out.println("如无需查看其它,请输入0退出");
int choice = sc.nextInt();
//退出方式1:
/*if(choice == 0){
System.out.println("感谢您的使用!");
break;
}*/
switch(choice){
//退出方式2:
/*case 0:
System.out.println("感谢您的使用!");
System.exit(0);//结束JVM
break;*/
//退出方式3:
case 0:
System.out.println("感谢您的使用!");
break loop;
case 1:
System.out.println("珍珠奶茶");
break;
case 2:
System.out.println("海底捞");
break;
case 3:
System.out.println("撸串");
break;
case 4:
System.out.println("麻辣香锅");
break;
case 5:
System.out.println("水煮鱼");
break;
case 6:
System.out.println("来顿牛蛙");
break;
case 7:
System.out.println("哈啤酒");
break;
default:
System.out.println("输入错误!");
break;
}
}
}
}
注意:
break和continue只能跳出、跳过自己所在的那一层关系,如果想要跳出、跳过指定的一层,就可以加入标号
14、Random随机数介绍:Random 跟 Scanner 类似,也是 Java 写好的类,其作用是产生随机数
14.1 问题
Random随机数使用步骤
- 找符咒:导包
import java.util.Random;
- 召唤精灵:创建对象
Random r = new Random(); //r 是变量名,可以变,其他的都不允许变
- 指挥精灵干活:获取随机数
//小扩号中的数字代表一个范围, 如果传入10;生成的就是10以内的随机数, 也就是 0-9
int num = r.nextInt(10); //获取数据的范围:[0,10) 包括0,不包括10
需求:
程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少?
当猜错的时候根据不同情况给出相应的提示
- 如果猜的数字比真实数字大,提示你猜的数据大了
- 如果猜的数字比真实数字小,提示你猜的数据小了
- 如果猜的数字与真实数字相等,提示恭喜你猜中了
实现思路 :
- 使用 Random 产生 1-100之间的随机数
- 使用 Scanner 键盘录入用户猜的数据
- 使用 if 语句进行比对
- 将【录入数据】 【 if 判断】 使用循环包裹
- 猜中后,通过break结束循环
代码实现:
public class Test {
public static void main(String[] args) {
Random r = new Random();
Scanner sc = new Scanner(System.in);
// 1. 使用 Random 产生 1-100之间的随机数
int randomNum = r.nextInt(100) 1;
// 2. 使用 Scanner 键盘录入用户猜的数据
System.out.println("请输入:");
// 4. 将【录入数据】 【if 判断】 使用循环包裹
while (true) {
int scNum = sc.nextInt();
// 3. 使用 if 语句进行比对
if (scNum > randomNum) {
System.out.println("猜大了");
} else if (scNum < randomNum) {
System.out.println("猜小了");
} else {
System.out.println("猜中了");
// 5. 猜中后,通过break结束循环
break;
}
}
}
}
1 打印5行5列的星星
for (int i = 0; i < 5; i ) {
for (int j = 0; j < 5; j ) {
System.out.print("* ");
}
System.out.println();
}
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
for (int i = 0; i < 5; i ) {
for (int j = 0; j <=i; j ) {
System.out.print("* ");
}
System.out.println();
}
*
* *
* * *
* * * *
* * * * *
2 九九乘法表
for (int i = 1; i <=9; i ) {
for(int j=1;j<=i;j ){
System.out.print(j "*" i "=" (j*i) '\t');
}
System.out.println();
}
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com