循环结构

85 阅读7分钟

1. 局部变量

概念:声明在方法内部的变量,必须先赋值再使用。

描述
定义位置必须定义在方法中 位置1234 不可以
作用范围离当前变量最近的大括号以内
关于重名在重合的作用范围内容,不能重名
存储位置基本数据类型,全部存放在栈(stack)中
引用数据类型,名字存放在栈(stack)中,值存放在堆(heap)中
生命周期随着方法的入栈(压栈)而生效,随着方法的出栈(弹栈)而死亡
package com.qfedu.test1;
/**
 * 	局部变量
 * 	概念:声明在方法内部的变量,必须先赋值再使用。
 * 
 * 	定义位置:必须定义在方法中 位置1234 不可以  
 * 	作用范围:离当前变量最近的大括号以内
 * 	关于重名:在重合的作用范围内容,不能重名
 * 
 * 	存储位置:
 * 		基本数据类型,全部存放在栈(stack)中
 * 		引用数据类型,名字存放在栈(stack)中,值存放在堆(heap)中
 * 	生命周期:
 * 		随着方法的入栈(压栈)而生效,随着方法的出栈(弹栈)而死亡
 * @author WHD
 *
 */
// 位置1
public class Test1 {
	// 位置2
	public static void main(String[] args) {
		int d;
		// System.out.println(d); 变量d没有赋值 不能访问
		
		int a = 10;
		
		int b = 20;
		
		if(a > b) {
			System.out.println("a大于b条件成立");
			// int a = 66;
			int c = 66;
			System.out.println(b);
		}else {
			// System.out.println(c); 这里不能访问c  因为c的作用范围 只在if中
			System.out.println(a);
			int c = 66;
		}
		
	}
	// 位置3
}
// 位置4

2.变量的命名

字下美人数骆驼

字:字母

下:下划线

美:美元符号 $

人:人民币符号 ¥

数:数字

骆驼:驼峰命名

变量命名可以以字母,下划线,美元符号,人民币符号开头,可以包含数字,不能以数字开头,遵循驼峰命名法

studentNameAndAge

package com.qfedu.test1;
/**
 * 	变量的命名
 * @author WHD
 *
 */
public class Test2 {
	public static void main(String[] args) {
		int a1 = 10;
		int _a = 20;
		int $c = 33;
		int ¥d = 44;
		
		// int 5d = 66; 不能以数字开头
		
		String studentName = "赵四";
		
	}
}

3. 循环

3.1 while循环

计数器初始化;

while ( 循环条件 ) {

  计数器变化;

}

while循环

  • while 单词: 当 ……

  • 所有的循环都必须的四个条件
  • 1.计数器初始化
  • 2.判断条件
  • 3.循环体
  • 4.计数器变化
   循环操作
package com.qfedu.test2;
/**
 * 	while循环
 * 	while : 当 …… 
 * 
 * 	所有的循环都必须的四个条件
 * 	1.计数器初始化
 * 	2.判断条件
 * 	3.循环体 
 * 	4.计数器变化
 * 
 * 	需求:使用while循环实现100遍好好学习
 * @author WHD
 *
 */
public class Test2 {
	public static void main(String[] args) {
		int i = 1;
		while(i <= 10000) {
			System.out.println("第"+ i +"遍好好学习");
			i++;
		}
		
		System.out.println("程序结束~");
		
		
		
	}
}
package com.qfedu.test2;

import java.util.Scanner;

/**
 * 	老师每天检查赵四的学习任务是否合格,如果不合格,
 * 	则继续进行。老师给赵四安排的每天的学习任务为:
 * 	上午阅读教材,学习理论部分,下午上机编程,掌握代码部分
 * @author WHD
 *
 */
public class Test3 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		
		System.out.println("请输入学习成绩是否合格?y/n");
		
		String answer = input.next();
		
		while(answer.equals("n")) {
			System.out.println("上午阅读教材,学习理论部分");
			System.out.println("下午上机编程,掌握代码部分");
			
			System.out.println("请输入学习成绩是否合格?y/n");
			answer = input.next();
		}
		
		
		System.out.println("恭喜你,完成学习任务~");
		
		
	}
}

3.2 do-while循环

do-while:做……当

计数器初始化;

do {

循环操作

计数器变化;

} while ( 循环条件 );

while和do-while的区别?

while是先判断 后执行 条件不成立 一次都不执行

do-while 是先执行  后判断 不管条件是否成立 至少执行一次

package com.qfedu.test3;

import java.util.Scanner;

/**
 * 	经过几天的学习,老师给赵四一道测试题,
 * 	让他先上机编写程序完成,然后老师检查是否合格。
 * 	如果不合格,则继续编写…… 
 * 
 * 	while和do-while的区别?
 * 	while是先判断 后执行 条件不成立 一次都不执行
 * 	do-while 是先执行  后判断 不管条件是否成立 至少执行一次
 * @author WHD
 *
 */
public class Test1 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		
		String answer = "";
		
		do {
			System.out.println("上机编写测试代码");
			
			System.out.println("请输入成绩是否合格?y/n");
			
			answer = input.next();
			
		}while(answer.equals("n"));
		
		System.out.println("恭喜你完成任务!");
		
	}
}
package com.qfedu.test3;
/**
 * 	使用do-while实现 打印N遍好好学习
 * @author WHD
 *
 */
public class Test2 {
	public static void main(String[] args) {
		int i = 1;
		do {
			System.out.println("do-while循环实现第"+ i +"遍好好学习");
			i++;
		}while(i < 0);
		
		int j = 1;
		while(j < 0) {
			System.out.println("while循环实现第"+ j +"遍好好学习");
			j++;
		}
		
		System.out.println("程序结束!");
		
		
	}
}

3.3 for循环

for(计数器初始化;   判断条件   ;  计数器变化){
循环体;
}

for循环同样需要循环的四个必不可少的部分

计数器初始化

判断条件

循环体

计数器变化

使用for循环实现100遍好好学习打印

for循环执行顺序:

第一轮

1.先执行计数器初始化 并且只执行一遍

2.执行判断条件

3.执行循环体

4.执行计数器变化

第二轮

直接从判断条件开始执行

package com.qfedu.test4;

import java.util.Scanner;

/**
 * 	for循环实现统计5门成绩,并且计算平均分
 * @author WHD
 *
 */
public class Test2 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		
		System.out.println("请输入名字");
		
		String name = input.next();
		
		double sum = 0;
		
		for(int i = 1;i <= 5;i++) {
			System.out.println("请输入第"+ i +"门成绩");
			
			double score = input.nextDouble();
			
			sum = sum + score; // sum += score;
		}
		
		System.out.println(name + "的5门成绩平均分是" + sum / 5);

	}
}
package com.qfedu.test5;

import java.util.Scanner;

/**
 * 	输出加法表
 * @author WHD
 *
 */
public class Test1 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		
		System.out.println("请输入一个数值");
		
		int num = input.nextInt();
		
		for(int i = 0;i <= num;i++) {
			System.out.println(i + "+" + (num - i) + "=" + num);
		}
		
		System.out.println("程序结束~");
	}
}

4. 循环对比

区别:

1.语法不同

2.执行顺序

while 循环:先判断,再执行

do-while循环:先执行,再判断

for循环:先判断,再执行

3.适用情况

循环次数确定的情况,通常选用for循环

循环次数不确定的情况,通常选用while或do-while循环

5.break关键字

break关键字

break可以用于switch中,表示跳出switch结构

也可以用于循环中,表示跳出当前循环,没有执行完的次数 不再执行

break关键字在循环中 通常结合分支结构来使用

break关键字之后 不能写代码

package com.qfedu.test6;
/**
 * 	break关键字
 * 	break可以用于switch中,表示跳出switch结构
 * 	也可以用于循环中,表示跳出当前循环,没有执行完的次数 不再执行
 * 
 * 	跑10圈 第8圈 太累了 退出
 * @author WHD
 *
 */
public class Test1 {
	public static void main(String[] args) {
		for (int i = 1; i <= 10; i++) {
			System.out.println("跑步第"+ i +"圈");
			if(i == 8) {
				System.out.println("太累了,不跑了");
				break; // 这里表示后续未执行完的循环次数  不再执行 中断循环
			}
			
		}
		System.out.println("程序结束~");
		
	}
}
package com.qfedu.test6;
/**
 * 	while循环  和 do-while循环中使用break
 * @author WHD
 *
 */
public class Test3 {
	public static void main(String[] args) {
		int i = 1;
		while(i <= 10) {
			System.out.println("跑步第"+ i + "圈");
			if(i == 5) {
				System.out.println("太累了,退出");
				break;
			}
			i++;
		}
		
		System.out.println("===============================================");
		int j = 1;
		do {
			System.out.println("跑步第"+ j +"圈");
			if(j == 6) {
				System.out.println("太累了,休息");
				break;
			}
			j++;
			
		}while(j <= 10);
			
	}
}
package com.qfedu.test6;

import java.util.Scanner;

/**
 * 	循环录入某学生5门课的成绩并计算平均分,
 * 	如果某分数录入为负,停止录入并提示录入错误
 * @author WHD
 *
 */
public class Test4 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		
		System.out.println("请输入名字");
		
		String name = input.next();
		
		int sum = 0; 
		
		boolean flag = true; // 定义布尔类型变量 用于判断哟农户是否录入了错误的成绩
		
		for(int i = 1;i <= 5;i++) {
			System.out.println("请输入第"+ i + "门成绩");
			
			int score = input.nextInt();
			
			if(score < 0) {
				flag = false;
				System.out.println("输入的分数有误,请重新录入");
				break;
			}
			
			sum += score;
		}
		
//		
//		if(flag) { // 布尔类型的变量 直接写变量名 等价于  变量 == true
//			System.out.println("平均分是" + sum / 5);
//		}else {
//			System.out.println("分数录入有误,不再计算平均分");
//		}
		
		System.out.println(flag ? "平均分是" + sum / 5 : "分数录入有误,不再计算平均分" );
		
		
		
		System.out.println("程序结束");
		
	}
}

6.continue关键字

continue :继续

适用场景:只能用在循环中

作用:表示跳出本次循环,继续执行下一次循环

break和continue的区别?

适用场景不同,break可以用于switch和循环中,continue只能用在循环中

作用不同:

  break表示中断循环,未执行完的循环次数不再执行

  continue表示跳出本次循环,继续执行下一次循环
package com.qfedu.test1;
/**
 * 	continue :继续
 * 	适用场景:只能用在循环中
 * 	作用:表示跳出本次循环,继续执行下一次循环
 * 
 * 	break和continue的区别?
 * 	适用场景不同,break可以用于switch和循环中,continue只能用在循环中
 * 	作用不同:
 * 		break表示中断循环,未执行完的循环次数不再执行
 * 		continue表示跳出本次循环,继续执行下一次循环
 * @author WHD
 *
 */
public class Test1 {
	public static void main(String[] args) {
		// 适用for循环打印1 ~ 10  当i的取值为5  分别使用break和continue 查看效果
		for (int i = 1; i <= 10; i++) {
			if(i == 5) {
				continue;
			}
			System.out.println(i);
		}
	}
}
package com.qfedu.test1;

import java.util.Scanner;

/**
 * 	循环录入Java课的学生成绩,统计分数大于等于80分的学生比例
 * @author WHD
 *
 */
public class Test2 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		
		System.out.println("请输入人数");
		
		int num = input.nextInt();
		
		double count = 0;
		
		for(int i = 1;i <= num;i++) {
			System.out.println("请输入第"+ i +"个人的成绩");
			
			int score = input.nextInt();
			
			if(score < 80) {
				System.out.println("成绩小于80分,不需要累计");
				continue;
			}
			
			count++;// 代码可以执行到这一步 表示成绩是大于等于80分的 因为如果小于80分 将执行continue continue后续的代码 不再执行
			
		}
		
		
		System.out.println("大于等于80分的人数占比是" + count / num * 100 + "%");
		
		
		
	}
}
package com.qfedu.test1;
/**
 * 	while循环和do-while循环中使用continue
 * @author WHD
 *
 */
public class Test3 {
	public static void main(String[] args) {
		int i = 0;
		while(i <= 10) {
			
			i++;
			if(i == 5) {
				continue;
			}
			System.out.println(i);
			
		}
		
		System.out.println("====================================");
		
		int j = 0;
		do {
			j++;
			if(j == 5) {
				continue;
			}
			System.out.println(j);
			
		}while(j <= 10);
		
		
		
	}
}
package com.qfedu.test1;
/**
 * 	求1~10之间的所有偶数和
 * @author WHD
 *
 */
public class Test4 {
	public static void main(String[] args) {
		int sum = 0;
		for (int i = 1; i <= 10; i++) {
			if(i % 2 != 0) {
				continue;
			}
			sum += i;
		}
		System.out.println(sum);
		
		System.out.println("===========================================");
		
		int sum1 = 0;
		
		for(int i = 0;i <= 10;i+=2) {
			sum1 += i;
		}
		
		System.out.println(sum1);
		
		
	}
}

7. debug调试

在需要停止的位置左侧,双击打断点,双击取消 断点

debug步骤.png

8.双重循环

外层变量变化一次 内层循环变量变化一轮

外层循环控制行数

内层循环控制列数

第一行元素的个数决定了计数器的初始值,

元素越来越多,就++,当计数器++的时候,我们必须设置一个上限,也就是我们的条件必须小于或者小于等于某个值,

否则就死循环

元素越来越少,就--,当计数器--的时候,我们必须设置一个下限,也就是我们的条件必须大于或者大于等于某个值,

否则就死循环

package com.qfedu.test3;
/**
 * 	平行四边形
 * 	当我们使用多重循环打印三角形:
 * 	第一行元素的个数决定了计数器的初始值,
 * 	元素越来越多,就++,当计数器++的时候,我们必须设置一个上限,也就是我们的条件必须小于或者小于等于某个值,
 * 	否则就死循环
 * 	元素越来越少,就--,当计数器--的时候,我们必须设置一个下限,也就是我们的条件必须大于或者大于等于某个值,
 * 	否则就死循环
 * @author WHD
 *
 */
public class Test2 {
	public static void main(String[] args) {
		for (int i = 1; i <= 5; i++) { // 表示行数  5行 执行5次的外层循环
			// 左半部分 倒三角
			for(int j = 5;j >= i;j--) {
				System.out.print("&");
			}
			
			
			// 右半部分 矩形
			for(int j = 1;j <= 5;j++) {
				System.out.print("*");
			}
			
			// 换行
			System.out.println();
		}
	}
}
package com.qfedu.test4;
/**
 * 	使用多重循环打印正三角形
 * 
 * 	外层循环控制行数
 * 	内层循环控制列数
 * 
 * 	第一行元素的个数决定了计数器的初始值,
 * 	元素越来越多,就++,当计数器++的时候,我们必须设置一个上限,也就是我们的条件必须小于或者小于等于某个值,
 * 	否则就死循环
 * 	元素越来越少,就--,当计数器--的时候,我们必须设置一个下限,也就是我们的条件必须大于或者大于等于某个值,
 * 	否则就死循环
 * @author WHD
 *
 */
public class Test1 {
	public static void main(String[] args) {
		for (int i = 1; i <= 5; i++) { // 5行的图案
			// 左半部分 倒三角
			for(int j = 5;j >= i ;j--) {
				System.out.print("^");
			}
			
			// 右半部分 直角三角形 因为左半部分的形状  将右侧挤成了正三角形
			for(int j = 1;j <= i * 2 -1 ;j++) {
				System.out.print("*");
			}
			
			// 换行
			System.out.println();
		}
	}
}
package com.qfedu.test4;

import java.util.Scanner;

/**
 * 	使用多重循环打印银行菜单系统
 * @author WHD
 *
 */
public class Test4 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int choice = 0;
		do {
			System.out.println("***********************************************");
			System.out.println("*************欢迎使用ATM银行菜单系统*************");
			System.out.println("1.开户  2.存款  3.取款  4.贷款  5.修改密码  6.查询余额  0.退出");
			System.out.println("***********************************************");
			choice = input.nextInt();
			switch (choice) {
			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 0:
				System.out.println("退出,欢迎下次使用~");
				break;
			default:
				System.out.println("输入有误,请重新输入");
				break;
			}
		} while (choice != 0);
		System.out.println("程序结束");
	}
}