循环结构
生活中的循环:在单圈400米的跑道商完成10000米长跑,当跑完25圈时,满足条件,循环结束
程序中的循环:
概念:通过某个条件,重复的执行一段逻辑代码
while循环
语法:
while(布尔表达式){
//逻辑代码(循环操作)
}
执行流程:
- 先对布尔表达式进行判断,结果为true,则执行逻辑代码
- 本次执行完毕后,再次进行判断,结果仍旧为true,则再次执行逻辑代码
- 直至布尔表达式的结果为false时,才会退出循环结构,执行后续代码
循环有四部分组成
初始与迭代
被循环条件判断的变量,才是初始部分和迭代部分
while的特点
特点:首次即有入口条件,先判断、再执行,适用于循环不次数明确的情况
如 while(i<=100)
课堂案例
public class Test{
public static void main(String[] args){
int i = 1;
int sum = 0;
while(i <= 100){
sum = sum + i;
i++;
}
System.out.println(sum);
}
}
public class Test2{
public static void main(String[] args){
int i = 1;
int sum = 0;
while(i < 100){ //1~100之间 包括100为:2550 不包括100为:2450
if(i%2 == 0){
sum = sum + i;
}
i++;
}
System.out.println(sum);
}
}
课堂案例
package com.zcs.lession04.demo;
public class Demo6 {
public static void main(String[] args) {
//抄代码 100
//初始化部分:初始化用于给循环条件和循环迭代使用变量
int count = 1;
// while(true) 死循环
//循环条件:用于判断是否继续循环操作
while(count<=100) {
//循环操作:循环要做的事情
System.out.println("抄代码 T-T~"+ count+"次");
//迭代部分:更新变量=>初始化变量->循环条件会有出口
count= count + 1;
}
}
}
package com.zcs.lession04.demo;
import java.util.Scanner;
public class Demo7 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//初始部分
boolean flag = true;
//循环条件
while(flag) {
//循环操作
System.out.println("你还想继续操作吗?");
//迭代部分
String a = input.next();
if(a.equals("no")) {
flag = false;
}
}
}
}
package com.zcs.lession04.demo;
public class Demo8 {
public static void main(String[] args) {
//初始化
int num = 1;
//定义一个sum来保存计算的结果
int sum = 0;
//循环条件
while(num<=100) {
System.out.println(num);
sum = sum + num;
num++;
}
System.out.println("1~100的和为:"+sum);
}
}
package com.zcs.lession04.demo;
public class Demo9 {
public static void main(String[] args) {
//1~100偶数和
//初始化
int num = 1;
//保存计算结果
int sum = 0;
//循环条件
while(num <= 100) {
if(num % 2 ==0) {
sum = sum + num;
}
num++;
}
//循环迭代
System.out.println("1~100的偶数和为:"+sum);
}
}
循环的组成
public class TestWhile{
public static void mian(String[] args){
//1、初始部分:用以判断的变量
int i = 1;
while(i < 100){//2、循环条件:决定是否循环的依据
System.out.println("HelloWorld");//3、循环操作:单次执行的逻辑代码或任务
i++//4、迭代部分:控制循环条件改变的增量
}
}
}
package com.zcs.lession04.demo;public class Demo10 { public static void main(String[] args) { int num = 1; int sum = 0; while(num<=100) { //只要num % 10 获取所有个位数的值,判断不是3的就进行累加 if(num % 10 != 3) { sum = sum + num; } num++; } System.out.println("个位数不为3的和:"+sum); }}
do while循环
语法:
do{ 逻辑代码(循环操作)}while(布尔表达式);
执行流程:
- 先执行一次循环操作之后,再进行布尔表达式的判断
- 如果结果为true,则再次执行循环操作
- 如果结果为false,才会退出循环结构,执行后续代码
do while的特点
public class TestDoWhile{ public static void main(String[] args){ int i = 1; //直接执行循环操作,首次没有入口条件 do{ System.out.println("HelloWorld"+i); i++; }while(i<=100); /* 判断满足,则循环. 不满足,则至少执行一次。(执行次数:1~n次) */ }}
特点:首次没有入口条件,先执行,再判断
do while 的应用场景
public class TestDoWhile{ public static void main(String[] args){ Scanner input = new Scanner(System.in); char answer;//记录老师当次的评语 do{ System.out.println("抄写一遍作业代码。。。。"); System.out.println("请输入老师评语:"); answer = input.next().charAt(0);//输入y,表示及格,退出循环,否则继续循环 }while(answer != 'y'); System.out.println("作业已完成"); }}
应用场景:适用循环次数不明确的情况
for循环
语法:
for(初始部分;循环条件;迭代部分){ //循环操作}
执行流程:
- 首次执行初始部分(仅一次)
- 对布尔表达式进行判断,结果为true,则执行逻辑代码
- 本次执行完毕后,执行迭代部分,再次判断,结果仍旧为true,则再次执行逻辑代码
- 直至布尔表达式结果为false时,才会退出循环结构,执行后续代码
for循环的特点
public class TestFor{ public static void main(String[] args){ /* int i = 1 1、初始部分(只执行一次) i <= 100 2、循环条件 System.out.println("HelloWorld"); 3、循环操作 i++ 4、迭代部分 */ for(int i = 1; i <= 100; i++){ System.out.println("HelloWorld"); } System.out.println("程序结束"); }}//for循环与while循环相同,首次判断不满足,则一次都不会执行。(执行次数:0~n次)
特点:首次即有入口条件,先判断、再执行,适用循环次数明确的情况。
package com.zcs.lession06.demo1;public class Demo1 { public static void main(String[] args) { for(int i = 0;i<10;i++){ System.out.println("Hello For~"); } for(int i = 0;i<10;i++){ System.out.println("Hello For~"); } for(int i = 0;i<10;i++){ System.out.println("Hello For~"); } //while int count = 0; while(count < 10) { System.out.println("Hello While~"); count++; } }}
课堂案例
import java.util.Scanner;public class Test3{ public static void main(String[] args){ Scanner input = new Scanner(System.in); int n = input.nextInt(); int sum = 1; for(int i = 1; i <= n; i++){ sum = sum * i; } System.out.println(sum); }}
import java.util.Scanner;public class Test4{ public static void main(String[] args){ Scanner input = new Scanner(System.in); double num = 0; for(int i = 1; i <= 5 ; i++){ System.out.println("请输入第"+i+"的学生成绩"); double stu = input.nextDouble(); num = num + stu; } double avg = num/5; System.out.println(avg); }}
package com.zcs.lession06.demo1;public class Demo4 { public static void main(String[] args) { // 死循环,注意可以没有循环4个要数,但是不能没有;; // for(;;){} int count = 1; for (double paper = 0.3; paper <= 8848.86; paper *= 2) { count++; System.out.println("纸折了"+count+"次,纸的厚度为:"+paper); } }}
流程控制
break : 终止、跳出switch、循环结构
public class TestBreak{ public static void main(String[] args){ for(int i = 1; i<= 10; i++){ if(i ==5 ){ //循环执行中,遇到break,则退出整个循环结构 break; } System.out.println("当前循环次数:"+i); } System.out.printlm("循环结束"); }}/*当前循环次数:1当前循环次数:2当前循环次数:3当前循环次数:4循环结束*/
package com.zcs.lession06.demo1;/** * break 关键字 * */public class Demo5 { // alt+/ public static void main(String[] agrs) { for (int i = 0; i < 10; i++) { if (i==3) { //打断循环 break; } System.out.println(i); } System.out.println("程序结束"); }}
package com.zcs.lession06.demo1;import java.util.Scanner;public class Demo6 { public static void main(String[] args) { Scanner input = new Scanner(System.in); do { System.out.println("学员在做试卷"); System.out.println("老师输入是否合格(y合格)"); String result = input.next(); if(result.equals("y")) { break; }; }while(true); System.out.println("程序结束!!"); }}
continue:结束本次循环、进入下一次循环
public class TestContinue{ public static void main(String[] args){ for(int i = 1; i<= 10; i++){ if(i ==5 ){ //循环执行中,遇到continue,则跳过次次,进入下一次循环 continue; } System.out.println("当前循环次数:"+i); } System.out.printlm("循环结束"); }}/*当前循环次数:1当前循环次数:2当前循环次数:3当前循环次数:4当前循环次数:6当前循环次数:7当前循环次数:8当前循环次数:9当前循环次数:10循环结束*/
package com.zcs.lession06.demo1;import java.util.Scanner;public class Demo7 { public static void main(String[] args) { //输入5个学员的成绩,如果输入的成绩不合格则跳过本次录入 Scanner input = new Scanner(System.in); int sum = 0; for(int i = 0;i<5;i++) { System.out.println("请输入第"+(i+1)+"个学员的成绩"); int score = input.nextInt(); if(score<0||score>100) { //结束本次循环,立即进入下次循环 //撤销上一次迭代 i--; continue; } System.out.println("请输入第"+(i+1)+"个学员的成绩是:"+score); sum+=score; } System.out.println("总分:"+sum); }}
package com.zcs.lession06.demo1;public class Demo8 { public static void main(String[] args) { for (int i = 0; i < 10; i++) { if (i == 5) { // alt+上下移动代码 System.out.println("进入if判断当中"); /* * * 不管是break还是continue * 只要执行了后面的代码是不会再执行, * 所以关键字下方不能写代码,因为不能看被执行下方代码 * */ //break; //continue; break; } System.out.println("i"); } }}
package com.zcs.lession06.demo1;import java.util.Scanner;/** * 循环输出xxx系统的菜单 * */public class Demo9 { public static void main(String[] args) { Scanner input = new Scanner(System.in); /* * switch和循环嵌套再一起的时候,switch里面的break是不会打断外层循环 只会打断switch结构 */ outside: while (true) { System.out.println("请输入要执行的操作:1、新增\t2、修改\t3、退出\t"); String chose = input.next(); switch (chose) { case "1": System.out.println("新增了"); break; case "2": System.out.println("修改了"); break; case "3": System.out.println("删除了"); break outside; default: break; } } }}
嵌套循环
概念:在一个完整的循环结构中,嵌套另一个完整的循环结构
打印3行5课星
public class TestNestFor1{ public static void main(String[] args){ for(int i = 1; i <= 3; i++){//外层循环控制行数 for(int j = 1; j <= 5;j++){//内存循环控制列数 System.out.print("*"); } System.out.println(); } }}/* 运行结果 ***** ***** ******/
计算3个班,每个班名同学的平均成绩
import java.util.Scanner;public class TestNestFor2{ public static void main(String[] args){ Scanner input = new Scanner(System.in); for(int i = 1; i <= 3; i++){ double sum = 0; for(int j = 1; j <=5; j++){ System.out.println("输入第"+i+"个班第"+j+"个学生"); double score = input.nextDouble(); sum = sum + score; } double avg = sum/5; System.out.println(avg); } }}
package com.zcs.lession06.demo1;public class Demo12 { public static void main(String[] args) { int count = 0; // 125 for (int i = 0; i < 5; i++) { // 25 for (int j = 0; j < 5; j++) { // 5 for (int j2 = 0; j2 < 5; j2++) { count++; } } } System.out.println(count); }}
package com.zcs.lession06.demo1;public class Demo15 { public static void main(String[] args) { // 99乘法表 for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System.out.print(i + "*" + j + "=" + i * j + "\t"); } System.out.println(); } }}
package com.zcs.lession06.demo1;public class Demo16 { public static void main(String[] args) { //循环标识符 ==>循环命名 outsode: for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if (j == 3) { /** * 打断他所在的循环 */ //终止循环名为outside的循环,会把本层循环一起中断 // break outsode; /** * 中止本层(所在的)循环,立即进入下一个循环 */ //终止循环名为outside的循环,然后继续循环 continue outsode; } System.out.println("j==>" + j); } System.out.println("i==>" + i); } }}
课堂案例
package com.zcs.lession06.demo1;public class Demo13 { public static void main(String[] args) { //5行 for (int i = 1; i <= 5; i++) { //列数 //因为每列要输出的*的个数和每行的i的数值是一致的 //所以使用i作为每列输出的条件控制 for (int j = 0; j < i; j++) { System.out.print("*"); } System.out.println(); } }}
import java.util.Scanner;public class Test7{ public static void main(String[] args){ Scanner input = new Scanner(System.in); int rows = 0; //菱形必须是奇数行 do{ System.out.println("请输入一个奇数行号:"); rows = input.nextInt(); }while(rows % 2 == 0); System.out.println("您输入的行数:"+rows); // 打印菱形 int up = rows / 2 + 1;//5行 int down = rows / 2; //4行 //1、打印上半段菱形 for(int i = 1; i <= up; i++){ for(int j = up-1; j >= i; j-- ){ System.out.print(" "); } for(int j = 1; j <= i*2-1; j++){ System.out.print("*"); } System.out.println(); } //打印下半段菱形 for(int i = down; i >= 1; i--){ for(int j = down; j >= i; j-- ){ System.out.print(" "); } for(int j = 0 ; j < i*2-1;j++){ System.out.print("*"); } System.out.println(); } }}
package com.zcs.lession06.demo1;public class Demo14 { public static void main(String[] args) { // 上半段 for (int i = 1; i <= 5; i++) { // 空格输出 for (int j = 1; j <= 5 - i; j++) { System.out.print(" "); } // 星星输出 for (int j = 1; j <= 2 * i - 1; j++) { System.out.print("*"); } System.out.println(); } // 下半段 for (int i = 1; i <= 4; i++) { for (int j = 0; j < i; j++) { System.out.print(" "); } for (int j = 7; j >= 2*i-1; j--) { System.out.print("*"); } System.out.println(); } }}
课后作业:
package com.cn.test;import java.util.Scanner;public class Test2 { public static void main(String[] args) { do { System.out.println("===================欢迎使用ATM自动银行服务===================="); System.out.println("1.开户 2.存款 3.取款 4.转账 5.查询余额 6.修改密码 0.退出"); System.out.println("=============================================================="); Scanner input = new Scanner(System.in); int num = input.nextInt(); switch (num) { case 1: System.out.println("=============================================================="); System.out.println("=================执行开户操作================="); System.out.println("=============================================================="); continue; case 2: System.out.println("=============================================================="); System.out.println("=================执行存款操作================="); System.out.println("=============================================================="); continue; case 3: System.out.println("=============================================================="); System.out.println("=================执行取款操作================="); System.out.println("=============================================================="); continue; case 4: System.out.println("=============================================================="); System.out.println("=================执行转账操作================="); System.out.println("=============================================================="); continue; case 5: System.out.println("=============================================================="); System.out.println("=================执行查询余额操作================="); System.out.println("=============================================================="); continue; case 6: System.out.println("=============================================================="); System.out.println("=================执行修改密码操作================="); System.out.println("=============================================================="); continue; case 0: System.out.println("=============================================================="); System.out.println("=================执行退出操作================="); System.out.println("=============================================================="); break; default: System.out.println("输入的错误的操作"); } } while (true); }}
总结
循环的概念:
-
while循环
通过某个条件,重复的执行一段逻辑代码
-
while 循环
while(){}
-
do while循环
do{} while();
-
for循环
for(初始;条件;迭代){操作;}
-
流程控制关键字
break、continue
-
嵌套循环
在以个完整的循环结构中,嵌套另一个完整的循环结构