day03

day03

循环结构

分类:

  1. for循环
  2. while循环
  3. do while循环

组成:

  1. 初始化部分
  2. 循环条件部分
  3. 循环体部分
  4. 迭代部分
for循环

流程:初始化部分–>循环条件部分–>循环体部分–>迭代部分

语法格式:

	for(初始化部分;循环条件部分;迭代部分){
		循环体部分;
	}
	//初始化部分-->循环条件部分-->循环体部分-->迭代部分-->循环条部分-->循环体部分-->......
	//循环条件部分为boolean类型表达式,当值为false时,退出循环
	//初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔
	//可以有多个变量更新,用逗号分隔(迭代部分)
	
		打印1~100之间所有奇数的和
		/*
		 * int i = 1为初始化部分,整个循环只会执行一次,i<=100为循环条件,当不满足条件时,就无法进入循环体,i++为迭代部分
		 * if(i % 2 == 1) {
		 *  	sum += i;
		 *  }为循环体,for循环之后的一对大括号里面的内容就是循环体的内容
		 *  整个执行流程:先进行int i = 1的初始化,然后判断条件,满足,进入循环体,当循环体里面的执行语句执行完成时,进入迭代部分,然后进入循环条件,如此往复
		 */
		int sum = 0;//记录总和
		for(int i = 1 ; i <= 100; i++) {
			if(i % 2 == 1) {
				sum += i;
			}
		}
		System.out.println(sum);//2500
		打印1~100之间所有是7的倍数的整数的个数和总和
		int sum = 0;
		int count = 0;
		for(int i = 1;i <= 100;i++){
			if(i%7 == 0) {
				sum += i;
				count++;
			}
		}
		System.out.println("1~100内所有7的倍数的个数为:"+count+",和为:"+sum);
		//1~100内所有7的倍数的个数为:14,和为:735
            输出所有的水仙花数,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。
		for(int i = 100;i <= 999;i++) {
			int a = i % 10;//获得个位数字
			int b = i / 10 %10;//获得十位数字
			int c = i / 100;//获得百位的数字
			int sum = a * a * a + b * b * b + c * c * c;
			if(sum == i) {
				System.out.print(i+"  ");
			}
		}
		//153  370  371  407  

初始化部分和迭代部分不一定都是对变量进行操作:

		int i = 0;
		for(System.out.print("A");i  <= 10;System.out.print("C"),i++) {
			
		}
		//ACCCCCCCCCCC
		//初始化部分不一定在for里面,也可以在外面,作用域的问题。
while循环

语法格式:

	初始化部分
	while(循环条件部分){ 
		循环体部分; 
		迭代部分;
    }

执行过程:

初始化部分–>循环条件部分–>循环体部分–>迭代部分–>循环条件部分–>循环体部分–>…

注意:

  1. 不要忘记声明迭代部分。否则,循环将不能结束,变成死循环。
  2. for循环和while循环可以相互转换

将水仙花数用while循环实现

		int i = 100;
		while(i<=999) {
			int a = i % 10;//获得个位数字
			int b = i / 10 %10;//获得十位数字
			int c = i / 100;//获得百位的数字
			int sum = a * a * a + b * b * b+ c * c * c;
			if(sum == i) {
				System.out.print(i+"  ");
			}
			i++;
		}
dowhile循环

格式:

	初始化部分;
	do{
		循环体;
		迭代部分;
	}while(循环条件);
	//初始化部分-->循环体-->迭代部分-->循环条件--》循环体-->......

do-while循环至少执行一次循环体。

		int i = 8;
		do {
			System.out.println(i);
			i++;
		}while(i < 8);
		//8

最简单“无限” 循环格式:while(true) , for ( ; ; ),无限循环存在的原因是并不知道循环多少次,需要根据循环体内部某些条件,来控制循环的结束.

嵌套循环

将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while均可以作为外层循环或内层循环。

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

		九九乘法表
1 * 1 = 1  
2 * 1 = 2  2 * 2 = 4  
3 * 1 = 3  3 * 2 = 6  3 * 3 = 9  
4 * 1 = 4  4 * 2 = 8  4 * 3 = 12  4 * 4 = 16  
5 * 1 = 5  5 * 2 = 10  5 * 3 = 15  5 * 4 = 20  5 * 5 = 25  
6 * 1 = 6  6 * 2 = 12  6 * 3 = 18  6 * 4 = 24  6 * 5 = 30  6 * 6 = 36  
7 * 1 = 7  7 * 2 = 14  7 * 3 = 21  7 * 4 = 28  7 * 5 = 35  7 * 6 = 42  7 * 7 = 49  
8 * 1 = 8  8 * 2 = 16  8 * 3 = 24  8 * 4 = 32  8 * 5 = 40  8 * 6 = 48  8 * 7 = 56  8 * 8 = 64  
9 * 1 = 9  9 * 2 = 18  9 * 3 = 27  9 * 4 = 36  9 * 5 = 45  9 * 6 = 54  9 * 7 = 63  9 * 8 = 72  9 * 9 = 81  
打印这个表更多的是找规律:
i行号,j列数
第一行:i:1,j:1
第二行:i:2,j:2
第三行:i:3,j:3
第四行:i:4,j:4
第五行:i:5,j:5
第六行:i:6,j:6
第七行:i:7,j:7
第八行:i:8,j:8
第九行:i:9,j:9

		for(int i = 1;i<=9;i++) {
			for(int j = 1;j <= i;j++) {
				System.out.print(i+" * "+j+" = "+(i*j)+"  ");
			}
			System.out.println();
		}

比较难一点的例题:

100以内的所有质数
		outer://自定义跳出位置,如果没有定义,则就近原则
		for(int i = 2; i <= 100;i++) {
			for(int j = 2;j <= Math.sqrt(i);j++) {
				if(i % j == 0) {
					continue outer;
				}
			}
			System.out.print(i+" ");
		}
		//2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 

break和continue的使用:

break只能用于switch语句和循环语句中。
continue 只能用于循环语句中。
二者功能类似,但continue是终止本次循环,break是终止本层循环。
break、continue之后不能有其他的语句,因为程序永远不会执行其后的语句。
标号语句必须紧接在循环的头部。标号语句不能用在非循环语句的前面。很多语言都有goto语句,goto语句可以随意将制转移到程序中的任意一条
语句上,然后执行它。但使程序容易出错。Java中的break和continue是不同于goto的。
综合练习
模拟实现基于文本界面的《家庭记账软件》。该软件能够记录家庭的收入、支出,并能够打印收支明细表。
项目采用分级菜单方式。主菜单如下:
			-----------------家庭收支记账软件-----------------
			1 收支明细
			2 登记收入
			3 登记支出
			4 退 出
import java.util.Scanner;

public class FamilyAccount {
	/**
	 * 测试小案例
	 * -----------------家庭收支记账软件-----------------
			1 收支明细
			2 登记收入
			3 登记支出
			4 退 出
	 */
	public static void main(String[] args) {
		boolean flag = true;
		Scanner sc = new Scanner(System.in);
		String details = "收支\t账户金额\t\t收支金额\t说    明\n";
		int balance = 10000;
		while(flag) {
			System.out.println("-----------------家庭收支记账软件-----------------");
			System.out.println("	             1 收支明细");
			System.out.println("	             2 登记收入");
			System.out.println("	             3 登记支出");
			System.out.println("	             4 退 出");
			System.out.print("请输入选择:");
			int theChoose = sc.nextInt();
			for(;;) {
				if((theChoose != 1) && (theChoose != 2) && (theChoose != 3) && (theChoose != 4)) {
					System.out.print("输入有误,请重新输入:");
					theChoose = sc.nextInt();
				}else break;
			}
			switch(theChoose) {
				case 1:
					System.out.println("-----------------当前收支明细记录-----------------");
					System.out.println(details);
					System.out.println();
					System.out.println("---------------------------------------------");
					break;
				case 2:
					System.out.print("本次收入金额:");
					int money = sc.nextInt();//从键盘获取收入的金额
					
					System.out.print("本次收入说明:");
					String desc = sc.next();//从键盘获取收入的说明
					
					//修改总金额
					balance += money;
					
					details += ("收入\t" + balance + "\t\t" + money + "\t" +desc + "\n");
					
					System.out.println("---------------------登记完成-------------------");
					break;
				case 3:
					System.out.print("本次支出金额:");
					int money1 = sc.nextInt();//从键盘获取收入的金额
					for(;;) {
						if(money1>balance) {
							System.out.print("输入有误,请重新输入:");
							money1 = sc.nextInt();
						}else break;
					}
					System.out.print("本次支出说明:");
					String desc1 = sc.next();//从键盘获取收入的说明
					//修改总金额
					balance -= money1;
					
					details += ("支出\t" + balance + "\t\t" + money1 + "\t" +desc1 + "\n");
					
					System.out.println("---------------------登记完成-------------------");
					break;
				case 4://退出
					System.out.print("确定退出吗?(Y/N):");
					String s = sc.next().toUpperCase();
					for(;;) {
						if("Y".equals(s) || "N".equals(s)) {
							if("Y".equals(s)) {
								System.out.println("拜拜~~");
								flag = false;
								break;
							}else break;
						}else {
							System.out.print("输入有误,请重新输入:");
							s = sc.next().toUpperCase();
						}
					}
					break;
			}
		}
		sc.close();
	}
}	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值