Day05.嵌套循环 、方法

本文详细介绍了嵌套循环的概念、格式和执行流程,通过实例展示了如何使用嵌套循环来实现特定的输出。同时,文章讲解了方法的定义、使用和注意事项,包括方法的返回值、参数列表和方法重载的概念。此外,提供了具体的代码示例,如计算最大值的方法及其调用方式。

嵌套循环

  1. 概念:一次循环的循环体又是一个循环。循环中定义循环
  2. 格式:
for(初始化语句1;条件表达式1;初始语句1的变化){
   for(初始化语句2;条件表达式2;初始化语句2的变化){
        循环体语句;
	}
}
  1. 执行流程:
    (1)初始化语句1
    (2)条件表达式1,结果要么为真,要么为假
    (3)如果条件表达式1结果为假,结束整个嵌套循环
    (4)如果条件表达式1结果为真,
    (5)进入内层循环,执行初始化语句2
    (6)条件表达式2,结果要么为真,要么为假
    (7)如果条件表达式2的结果为假,结束内层循环
    (8)执行初始化语句1的变化
    (9)回到第二步,重新执行条件表达式1
    (10)如果条件表达式2的结果为真,执行循环体语句
    (11)执行初始化语句2的变化
    (12)回到第6步
  2. 图示:
    在这里插入图片描述
    总结:
    (1)外层循环依次,内层循环5次
    (2)整个循环结束的条件:外层的条件表达式为假

代码

class Demo01 {
	public static void main(String[] args) {
		//外层循环一共循环3次
		for(int i = 1;i <= 3;i++){
			//内层循环一共循环了3遍,每一遍循环5次
			for(int j = 1;j <= 5;j++){
				System.out.println("i = " + i + " ,j = " + j);
			}
		}
	}
}

案例1

class Demo02 {
	public static void main(String[] args) {
		//使用嵌套循环,打印如下图形
		/*
		    *****
			*****
			*****
			*****
		
		*/	
			//外层循环控制行数,内层循环控制列数
			//外层循环循环4次,一共4行
			for(int i = 1;i <= 4;i++){
				//内层循环每次循环5次,每行5个
				for(int j = 1;j <= 5;j++){
					System.out.print("*");
				}
				System.out.println();
			}
	}
}

方法

  1. 概述:用来表示某一个功能的代码段
  2. 原因:
    如果有一段功能经常使用,就可以使用一个大括号将这段代码括起来,并且给这段代码 起一个名字;下次想要使用这段代码,只需要使用这个名字就可以。

方法的定义

  1. 格式:
    修饰符 返回值类型 方法名称 (参数列表){
    方法体语句;
    return语句;
    }
  2. 说明:
    (1)修饰符:统一写为public static
    (2)返回值类型:方法表示某一个功能, 这个功能有可能有些数据的产出,将来方法 产出的数据是哪一个类型,返回值类型定义为哪一个类型。
    (3)方法名称:给方法起一个名字(以后调用方法使用的名字)
    小驼峰命名法
    (4)参数列表:方法表示某一个功能,想要调用该功能,就需要提供对应的数据
    一般定义变量来表示定义参数列表
    (5)方法体语句:完成方法所需功能,对应的逻辑代码
    (6)return语句:返回数据
  3. 补充:
    方法定义之后,不会自动执行。需要自己调用

方法的使用

  1. 格式:
    方法名称(参数);
  2. 分类:
    (1)直接调用:直接使用方法的名字,传递对应的参数
    当方法没有返回值的时候
    (2)输出调用:将方法的调用,定义在一个输出语句中
    方法有返回值,只需要将返回的值进行打印
    (3)赋值调用:方法有返回值,使用一个变量接收这个返回值
    方法返回的数据,后续需要多次使用,可以使用一个变量存储

代码

class Demo03 {
	public static void main(String[] args) {

		int a = 10;
		int b = 20;
		//输出调用
		System.out.println(getMax(a,b));
		System.out.println(getMax(1000,2000));

		//直接调用
		getMax(1,2);


		//赋值调用
		int max = getMax(10,20);
		//后续可以多次使用max最大值

	}
	//定义一个方法,可以求出两个整数的最大值
	//修饰符:public static 
	//返回值类型:int
	//方法名称:getMax
	//参数列表:int a   int b
	//方法体:获取最大值的代码
	//return语句:return max
	public static int getMax(int a,int b){
		int max;
		if(a > b){
			max = a;
		}else{
			max = b;
		}
		return max;
	}
}

方法的注意事项

  1. 方法的定义:
    (1)方法之间是平级关系,不能嵌套定义
    (2)方法可以嵌套使用
    (3)方法定义的先后没有任何区别
    方法的执行的顺序,跟使用的顺序有关, 先使用方法先执行,后使用方法后执行
  2. 参数列表:
    形式参数:在定义方法时,需要传递给方法的数据
    实际参数:在使用方法时,传递的一些具体数据
    实际参数和形式参数,是按照顺序传递的(按照顺序对应)
  3. return语句:
    (1)作用一:结束方法 作用二:给方法返回数据
    (2)如果方法有返回值,return后面跟着的数据的类型必须和定义的返回值类型一致
    (3)如果方法没有返回值,方法的返回值类型就定义为void
    return语句可以写为:return; 也可以省略不写
    (4)return返回的数据返回给谁?谁调用返回给谁(在哪调用的,就返回到哪一个地 方)
    (5)如果需要返回数据,return语句必须定义在方法的最后一行

方法的执行图示

在这里插入图片描述

方法的重载

  1. 重载:Overload 超载
  2. 方法的重载:
    在同一个类中,多个方法的方法名相同,参数列表不同,与返回值类型无关
  3. 说明:
    (1)在同一个类中:方法的重载只能出现在同一个类中
    (2)多个方法的名字相同:方法名一模一样,大小写都一样
    (3)参数列表不同:参数的个数不同、参数的类型不同、参数类型的顺序不同
    (4)返回值类型无关:方法之间是不是重载,跟返回值类型没有关系
  4. Java支持重载的好处:
    如果不支持重载:
    如果有一些方法,这些方法都属于同一类功能。需要给这些方法起不同的名字,后 续想要使用这些方法,需要去查询方法的名字。这样做太麻烦。
    支持重载:
    如果有一些方法,这些方法都属于同一类功能,可以给这些方法起一个共同的名字, 后续想要使用这些方法,不需要查询不同的名字,名字都是一样的直接使用即可。
<think>好的,用户问嵌套循环看起来头晕怎么办。我得先理解为什么嵌套循环会让人困惑。可能的原因有几个:层次太多导致逻辑混乱,变量名不清晰,或者循环条件复杂。 首先,我应该解释嵌套循环的基本概念,比如外层和内层循环的执行顺序。然后,针对头晕的问题,给出具体的解决建议。例如,建议限制嵌套层数,通常不超过三层,否则代码可读性会变差。这时候可以考虑拆分部分循环为函数,简化结构。 接下来,变量命名很重要。使用有意义的变量名,比如用row和col代替i和j,能让代码更清晰。此外,添加注释也是一个好方法,帮助理解每个循环的作用。 然后是缩进和格式,正确的缩进能让层次结构一目了然。如果用户写的代码缩进混乱,自然会难以理解。建议使用IDE的格式化功能保持代码整洁。 另外,调试技巧也有帮助。比如在内层循环中加入打印语句,观察变量变化,或者使用调试器逐步执行。通过实际例子展示如何分解问题,比如打印乘法表,让用户看到每一步的结果。 最后,提供学习建议,比如从简单例子开始,逐步增加复杂度,以及多练习来熟悉嵌套循环的逻辑。可能还需要提到其他替代方案,如使用数组方法或递归,但注意这些可能不总是适用。 在代码示例部分,给出一个清晰的例子,比如打印乘法表,展示良好的命名、注释和结构。这样用户能直观看到如何应用前面的建议。 相关问题方面,需要围绕嵌套循环的常见问题展开,比如优化、替代方法、避免错误和最佳实践,这样用户可以有进一步的学习方向。</think><< 嵌套循环的阅读和编写困难通常源于以下原因及解决方法: **原因分析:** 1. 层次结构混乱:多层循环叠加导致逻辑路径复杂 2. 变量命名不清晰:使用i/j/k等无意义变量名增加理解难度 3. 缩进格式不规范:代码块边界不清晰 4. 循环条件复杂:包含多个判断条件的循环 **解决方法:** 1. **限制嵌套层数**(推荐最多3层): ```c // 将深层循环拆分为函数 void process_row(int row) { for(int col = 0; col < 10; col++) { // 处理单个单元格 } } int main() { for(int i = 0; i < 10; i++) { process_row(i); } } ``` 2. **明确变量命名**: ```c for(int month = 1; month <= 12; month++) { for(int day = 1; day <= 30; day++) { for(int hour = 0; hour < 24; hour++) { // 使用有意义的变量名 } } } ``` 3. **添加可视化注释**: ```c // 外层循环:处理年度数据 for(int year = 2000; year < 2024; year++) { /*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 中层循环:处理月度数据 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━*/ for(int month = 1; month <= 12; month++) { // 内层循环:处理每日数据 for(int day = 1; day <= 30; day++) { // ... } } } ``` 4. **调试技巧**: ```c for(int x = 0; x < 5; x++) { printf("外层循环 x=%d\n", x); for(int y = 0; y < 3; y++) { printf("├─ 中层循环 y=%d\n", y); for(int z = 0; z < 2; z++) { printf("│ └─ 内层循环 z=%d\n", z); } } } ``` 5. **逐步分解法**(以乘法表为例): ```c // 第一步:实现单行输出 void print_multiplication(int base) { for(int i = 1; i <= base; i++) { printf("%d\t", base * i); } printf("\n"); } // 第二步:组合为完整表格 void print_table(int size) { for(int row = 1; row <= size; row++) { print_multiplication(row); } } ``` **训练建议:** 1. 从二维数组处理开始练习 2. 使用图形化输出观察循环结构 3. 先写注释再填充代码 4. 使用纸笔绘制循环流程图 **可视化工具推荐:** - 使用在线代码可视化工具(如pythontutor.com/c.html) - IDE的调试模式逐步执行 - 打印循环变量组合的二维/三维坐标 >>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值