Java·第三章·控制结构·循环结构·跳出语句

本文详细介绍了Java中的for、while、do-while循环的基本语法、注意事项以及嵌套循环的运用。同时涵盖了break和continue语句的使用场景,以及如何通过内存分析法理解和实践循环逻辑。
摘要由CSDN通过智能技术生成

循环结构(for,while,dowhile,多重循环)

for循环控制

  • 基本语法

for(循环变量初始化;循环条件;循环变量迭代){
		循环操作(语句);
}
  • 说明
    1. for关键字,表示循环控制
    2. for有四要素:
      1. 循环变量初始化
      2. 循环条件
      3. 循环操作
      4. 循环变量迭代
    3. 循环操作可以有多条语句,也就是我们要循环执行的代码
    4. 如果 循环操作(语句)只有一条语句,可以省略{},建议不要省略
  • 流程图

 

 注意事项和细节说明

1. 循环条件使返回一个布尔值的表达式

2.for(;循环判断条件;)中的初始化和变量迭代可以写到其它地方,但是两边的分号不能省略

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

 3.循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开。循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。

4.内存分析法分析输出结果

        分析: 

                1)执行 int i = 0,j = 0;

                2)执行 i < count;

                3)执行 System.out.println("i=" + i + "j=" + j);

                4)执行 i++,j += 2(判断(i < count)?)

int count = 3;
for(int i = 0,j = 0;i < count;i++,j += 2){
		System.out.println("i=" + i + "j=" + j);
}// 0 0    1 2   2 4  
 练习题

1.打印1-100之间所有是9的倍数的整数,统计个数及总和

🤔 编程思想:化繁为简

public class Homework01{
public static void main(String[] args){
	/*思路分析
	1.完成 输出1-100的值
	2.在输出的过程中,进行过滤,只输出9的倍数
	3.统计个数,定义一个变量 int count = 0;当条件满足时count++;
	4.总和,定义一个变量 int sum = 0;当条件满足时累计 sum+=i*/
	int count = 0;//统计个数
	int sum = 0;
	for(int i = 1;i <= 100;i++){
		if(i % 9 ==0){
			System.out.println("i=" + i);
			count++;
			sum += i;
		}
	}
	System.out.println("count=" + count);
	System.out.println("sum=" + sum);
} 	
}

 🤔 先死后活[先考虑固定的值,然后转成可以灵活变化的值]

/*1.为了适应更好的需求,把范围开始的值和结束的值,做成变量
	2.还可以更进一步 9 倍数也做成变量 int t = 9*/
	int count = 0;//统计个数
	int sum = 0;
	int start = 1;
	int end = 100;
	int t = 5;
	for(int i = start;i <= end;i++){
		if(i % t ==0){
			System.out.println("i=" + i);
			count++;
			sum += i;
		}
	}
	System.out.println("count=" + count);
	System.out.println("sum=" + sum);

2. 完成以下输出

public class Homework01{
public static void main(String[] args){
	/*0 + 5 = 5
	  1 + 4 = 5
	  2 + 3 = 5
	  3 + 2 = 5
	  4 + 1 = 5
	  5 + 0 = 5*/
	  for (int i = 0;i <= 5;i++){
	  		System.out.println(i + "+" + (5 - i) + "=" + 5);
	  }
} 	
}

 🤔 先死后活

  //5 替换成n
	  int n = 10;
	  for (int i = 0;i <= n;i++){
	  		System.out.println(i + "+" + (n - i) + "=" + n);
	  }

while循环控制

  • 基本语法

while(循环条件){
		循环体(语句);
		循环变量迭代;
}
  • 说明
    1. while循环也有四要素
    2. 只是四要素放的位置不一样
  • 注意事项和细节说明

    1. 循环条件是返回一个布尔值的表达式
    2. while循环时先判断再执行语句
  • 练习题

1. 打印1-100之间所有能被3整除的数

public class Homework01{
public static void main(String[] args){
	int i = 1;
	while(i<=100){
		if(i % 3 ==0){
			System.out.print(i + "\t");
		}
		i++;//变量自增
	}
} 	
}

2. 打印40-200之间所有的偶数

public class Homework01{
public static void main(String[] args){
	int i = 40;
	while(i<=200){
		if(i % 2 ==0){
			System.out.print(i + "\t");
		}
		i++;
	}
} 	
}

do-while循环控制

  • 基本语法

循环变量初始化;
do{
		循环体(语句);
		循环变量迭代;
}while(循环条件);
  • 说明
    1. do while是关键字
    2. 也有循环四要素,只是位置不一样
    3. 先执行在判断,也就是说至少会执行一次
    4. 最后有一个分号**;**
    5. while和do-while的区别,举例:要账
      1. while先判断再执行
      2. do-while先执行再判断
  • 注意事项

    1. 循环条件是返回一个布尔值的表达式
    2. do-while循环是先执行,再判断,因此它至少执行一次
  • 练习题

1. 打印1-100,计算1-100的和

public class Homework01{
public static void main(String[] args){
	int i = 0;
	int sum = 0;
	do{
		i++;		
		System.out.println(i);
		sum += i;
	}while(i < 100);
	System.out.println("sum=" + sum);
} 	
}

2. 统计1-200之间能被5整除但不能被3整除的个数

public class Homework01{
public static void main(String[] args){
	int i = 1;
	int num = 0;
	do{
		i++;
		if(i % 5 == 0 && i % 3 != 0){
			System.out.println("i=" + i);
			num++;
		}
	}while(i <= 200);
	System.out.println("num=" + num);
} 	
}

3. 如果李三不还钱,则lucy将一直使出五连鞭,直到李三说还钱为止[System.out.println(”lucy问:‘还钱吗’?y/n”);]do……while……

import java.util.Scanner;
public class Homework01{
public static void main(String[] args){
	/*化繁为简
	1)不停的问还钱吗?
	2)使用char answer接收,定义一个Scanner对象
	3)在do-while的while判断如果是y就不再循环*/
	Scanner input = new Scanner(System.in);
	char answer = ' ';
	do{
		System.out.println("lucy使出五连鞭");
		System.out.println("lucy问还钱吗?y/n");
		answer = input.next().charAt(0);
		System.out.println("他的回答是" + answer);
	}while(answer != 'y');
	System.out.println("李三还钱了!");
} 	
}

!多重循环控制

  • 介绍

1. 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for、while、do-while均可以作为外层循环和内层循环【建议一般使用两层,最多不要超过3层。否则代码的可读性很差】

2.实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当层循环,开始下一次的循环。

for(int i = 0;i < 2;i++){
		for(int j = 0;j < 3;j++){
			System.out.println("i=" + i + "j=" + j);
		}
		/*
		i=0j=0
		i=0j=1
		i=0j=2
		i=1j=0
		i=1j=1
		i=1j=2 */

 

 3.设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m * n次

 练习题

1. 统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]。统计三个班及格人数,每个班有5名同学。

import java.util.Scanner;
public class Homework01{
public static void main(String[] args){
	/*思路分析:
	化繁为简
	1)先计算一个班的成绩,5个学生,使用for
		1.1)创建Scanner对象然后,接收用户输入
		1.2)得到该班级的平均分,先定义一个 double sum把该班学生的成绩累计起来
	2)统计3个班(每个班5个学生)平均分
	3)所有班级的平均分
		3.1)定义一个变量 double totalScore 累积所有学生的成绩
		3.2)当多重循环结束后,totalScore / (3 * 5)
	4)统计三个班的及格人数
		4.1)定义变量 int pasNum = 0;
		4.2)当有一个学生成绩>=60.passNUm++
	5)优化【效率/可读性/结构】*/
	Scanner input = new Scanner(System.in);
	double totalScore = 0;//累积所有学生的成绩
	int passNum = 0;//累积及格人数
	for(int i = 1;i <= 3;i++){
		double sum = 0;
		for(int j = 1;j <= 5;j++){
			System.out.print("请输入第" + i +"个班的第" + j + "个学生的成绩:");
			double score = input.nextDouble();
			//当有一个学生成绩>=60, passNum++
			if(score >= 60){
				passNum++;
			}
			sum += score;//累积	
		}
		//因为sum是5个学生的总成绩
		System.out.println("sum=" + sum + "平均分=" + (sum / 5));
		//把 sum累计到totalScore
		totalScore += sum;
	}
	System.out.println("三个班总分=" + totalScore
		+ " 平均分=" + totalScore /(3 * 5));
	System.out.println("及格人数有:" + passNum);
	} 	
}

2. 打印出九九乘法表。

public class Homework01{
public static void main(String[] args){
	for(int i=1;i<=9;i++) {
        for(int j=1;j<=i;j++) {
           System.out.print(j+"×"+i+"="+i*j+"\t");// \t 跳到下一个TAB位置
            }
            System.out.println();
        }
	} 	
}

 🐾 经典的打印金字塔

使用for循环完成。编写一个程序,可以接收一个整数,表示层数(totalLevel),打印出金字塔[化繁为简,先死后活]

public class Homework01{
public static void main(String[] args){
	/*
	  *
   * *
  *   *
 *******     
	 */
	/*思路分析:化繁为简
	1.打印一个矩形
		*****
		*****
		*****
		*****
		*****
	2.打印半个金字塔 
	*
	**
	***
	****
	*****
	3.打印整个金字塔
	  *     2*层数-1 4个空格(总层数-1)
   ***             3个空格(总层数-2)
  *****
 *******
*********
	4.打印空心金字塔
	  *     2*层数-1  当前行的第一个位置是*,最后一个位置也是*
   * *             
  *   *
 *     *
*********  全部输出*
    */
   /*
   先死后活
   5 层数做成变量 int totallLevel = 5
    */
   	int totallLevel = 10;
		for(int i = 1;i <= totallLevel;i++){//表示层数
			//在输出*之前还要输出空格
			for (int k = 1;k <= totallLevel - i;k++ ) {
				System.out.print(" ");
			}
			//控制打印每层*的个数
			for(int j = 1;j <= 2 * i - 1;j++){
				//当前行的第一个位置是*,最后一个位置也,最后一层全部*
				if(j == 1 || j == 2 * i - 1 || i == totallLevel){
					System.out.print("*");	
				}else{
					System.out.print(" ");
				}		
			}
			System.out.println(" ");
				}
		}
	} 	

 跳出语句

break

随机生成1-100个数,知道生成了97这个数,看看一共用了几次?

提示:(int)(Math.random() * 100) + 1

思路:循环,但是循环的次数不知道→break 当某个条件满足时,终止循环

  • 基本介绍

    break语句用于终止某个语句块的执行,一般使用在switch或者循环(for、while)

  • 快速入门

public class Homework01{
public static void main(String[] args){
	for(int i = 0;i < 10;i++){
		if(i == 3){
			break;
		}
		System.out.print("i=" + i + "\t");
		//i=0     i=1     i=2
		}
		System.out.println("退出for循环");
	}
	} 	

 注意事项和细节说明

 break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块

标签的基本使用
label1:
	for(int j = 0;j < 4;j++){
	label2:
		for(int i = 0;i < 10;i++){
			if(i == 2){
				//break;//等价于break label2
				break label1;
			}
			System.out.println("i=" + i);
		}
	}
  • 说明:
    1. break语句可以指定退出哪层
    2. label1是标签,名字由程序员指定。
    3. break后指定到那个label就退出到那里
    4. 如果没有指定break,默认退出最近的循环体。
 练习题

1. 1-100以内的数求和,求出当和第一次大于20的当前数(for+break)

public class Homework01{
public static void main(String[] args){
	int sum = 0;
	//i的作用范围在for
	//在for循环外部定义变量n,把当前i赋给n
	int n = 0;
	for(int i = 1;i <=100;i++){
		sum += i;
		if(sum > 20){
			System.out.println("和大于20");
			n = i;
			break;
		}
	}
	System.out.println("当前数为:" + n);
	}
	} 	

2. 实现登录验证,有3次机会,如果用户名为“lucy”,密码“666”提示登录成功,否则提示还有几次机会(for+break)

import java.util.Scanner;
public class Homework01{
public static void main(String[] args){
	Scanner input = new Scanner(System.in);
	String username = ""; 
	String password = ""; 
	int chance = 3;
	for(int i = 1;i <= 3;i++){
		System.out.print("请输入用户名:");
		username = input.next();
		System.out.print("请输入密码:");
		password = input.next();
		//比较输入的名字和密码是否正确
		//补充说明 字符串内容的比较 使用的是equals
		//System.out.println("林黛玉".equals(name)); 可以避免空指针
		if("lucy".equals(username) && "666".equals(password)){
			System.out.println("登陆成功!");
			break;
		}
			chance--;
			System.out.println("还有" + chance + "次机会");
		}
	}
	} 	

continue

  • 基本介绍

    1. continue语句用于结束本次循环,继续执行下一次循环
    2. continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环,这个和前面的标签的使用规则一样。
  • 快速入门

public class Homework01{
public static void main(String[] args){
	int i = 1;
	while(i <= 4){
		i++;
		if(i == 2){
			continue;
		}
		System.out.print("i=" + i + "\t");
		//i=3     i=4     i=5
	}
}
} 	

 案例分析说明

 //可利用内存分析法
tabel1:
	for(int j = 0;j < 2;j++){
		label2:
		for(int i = 0;i < 3;i++){
			if(i == 2){
				continue;//等价于continue label2
			}
			System.out.print("i=" + i + "\t");
			//i=0     i=1     i=0     i=1
		}
	}

return

  • 介绍

    return使用在方法,表示跳出所在的方法。

    如果return写在main方法,退出程序。

public class Homework01{
public static void main(String[] args){
	for(int i = 1;i <= 5;i++){
		if(i == 3){
			System.out.println("十六" + i);
			return;
		}
		System.out.println("Hello word!");
	}
	System.out.println("go on..");
	/*Hello word!
	Hello word!
	十六3*/
}
} 	

  • 32
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Annabelle.02

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值