一 循环结构
1 为什么学习循环操作
当需要对部分的代码进行多次重复操作时
2 循环分类
1 while循环
2 do…while循环
3 for循环
3 while循环
1 语法格式
初始化条件;
while(判断条件){
循环体;
循环增量(结束条件);
}
2 执行流程:根据初始化条件值判断是否满足判断条件,如果满足,则执行循环体
3 代码演示
public class play{
public static void main(String[] args){
int num = 0;
while(num < 5){
System.out.println("第"+(num+1)+"遍输出");
num++;
}
System.out.println("num="+num);
}
}
4 do…while
1 语法格式
初始化条件;
do{
循环体;
循环增量;
}while(判定条件);
2 执行流程:先执行一次do代码块中的操作,然后根据初始化条件,判断是否满足判定条件,如果满足再次执行do代码块中的代码
3 代码演示
public class play{
public static void main(String[] args){
int num = 0;
do {
System.out.println("第"+(num+1)+"遍输出");
num++;
}while(num < 5);
}
}
4 while与do…while的区别?
答:当初始化条件和判断条件一致,且初始化条件不满足判定条件时,do…while会执行一次,也就是while先判断,再执行,而do…while先执行一次,再判断
5 for循环
1 语法格式
for(初始化条件;判定条件;循环增量){
循环体;
}
2 执行流程:先执行初始化条件,判断初始化条件是否满足判定条件,如果满足则执行循环体,循环增量,再次进行判断;直到不满足判断条件时,循环结束
3 代码演示
public class play{
public static void main(String[] args){
System.out.println("倒数");
for(int i = 5;i > 0; i--){
System.out.println(i);
}
}
}
4 for循环与while循环的区别,以及适用场景
答:
①区别:在相同条件下,for比while更节省内存空间
②适用场景:
Ⅰ.已知循环次数时,使用for循环
Ⅱ.未知循环次数时,使用while循环,一般情况下循环的条件都是true
6 每种循环的特殊状态 – 死循环
1 while和do…while的死循环写法
while(true){}
do{}while(true);
2 for循环死循环写法
for(; ; ){}
for(初始化条件 ; ; ){}
for(初始化条件;判定条件;){}
for(初始化条件;;循环增量){}
二 循环嵌套
双重for循环规则
1 外循环控制行,内循环控制列
2 外循环执行一次,内循环执行一遍(一圈)
3 代码演示
//打印正方形
public class play{
public static void main(String[] args){
for(int row = 0;row < 5; row++){
for(int col = 0;col < 5; col++){
System.out.print("*");
}
System.out.println();
}
}
}
三 结束语句
1 使用前提:必须定义在流程控制语句中
2 作用:结束与之定义位置最近的那个流程控制语句
3 分类:break和continue
4 代码演示
public class play{
public static void main(String[] args){
//1.给定范围打印不小于6的数字
for(int i = 9;i >= 0;i--){
if(i < 6){
break;
}
System.out.println(i);
}
System.out.println("------------------------------");
//2.给定范围打印除6以外的数字
for(int i = 0;i < 10;i++){
if(i == 6){
continue;
}
System.out.println(i);
}
}
}
5 break与continue的异同点
相同点:
①都是能够结束流程控制语句的操作
②都可以定义在任意的流程控制语句中
③都对if语句不起作用
不同点:
①break:终止语句;当代码执行到break时,流程控制语句结束;既对switch语句起作用,也对所有的循环语句起作用
②continue:中断语句;当代码执行到continue时,会跳过本次,执行下一次;只对所有的循环语句起作用
案例-结束指定层流程控制语句
1 案例需求:从键盘分别输入账户、密码;只有账户为admin时,才可以输入密码;否则需要重新输入账户;只有密码为111111,显示登录成功,程序结束;否则重新输入密码,直到正确为止
2 代码演示
// 方式一:给指定层的流程控制语句其别名(符合变量名的命名规范,没有特殊要求,一般使用任意一个小写字母完成定义)
public class play {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
// 起别名
a:while(true){
System.out.print("帐号:");
String userName=sc.next();
if(userName.equals("admin")){
while(true){
System.out.print("密码:");
String password=sc.next();
if(password.equals("111111")){
System.out.println("登录成功");
// 跳出对应循环
break a;
}else{
System.out.println("密码错误,请重新输入");
}
}
}else{
System.out.println("帐号错误,请重新输入");
}
}
sc.close();
}
}
// 方式2:定义布尔类型变量(标记变量)
public class play{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
boolean flag = false;
while(true){
System.out.print("帐号:");
String userName=sc.next();
if(userName.equals("admin")){
while(true){
System.out.print("密码:");
String password=sc.next();
if(password.equals("111111")){
System.out.println("登录成功");
// 修改标记 结束当前循环
flag = true;
break;
}else{
System.out.println("密码错误,请重新输入");
}
}
}else{
System.out.println("帐号错误,请重新输入");
}
// 根据循环标记判断程序是否结束
if(flag){
break;
}
}
sc.close();
}
}