java循环结构07_嵌套循环

在一个循环语句内部再嵌套一循环或多个循环,称为嵌套循环。while、do-while与for循环可以任意嵌套多层。

多重循环执行过程:外层循环变量变化一次,内层循环变量要变化一遍

随堂练习

1、 在控制台先打印矩形,然后再打印平行四边形,再然后打印等腰三角形。
在这里插入图片描述

/**
 * 打印矩形
 * 	 ************
 * 	 ************
 * 	 ************
 * 	 ************
 * 多重循环执行过程:外层循环变量变化一次,内层循环变量要变化一遍 。 
 */ 
// 外侧循环:控制行数
for(int i = 0; i < 4; i++) {
	// 内侧循环:控制列数
	for(int j = 0; j < 13; j++) {
		System.out.print("*");
	}
	System.out.println();
}

/**
 * 打印平行四边形
 * 	 ************
 * 	  ************
 * 	   ************
 * 		************
 * 思路:选择嵌套循环。外侧循环,用于控制打印的行数,内侧循环,分别用于控制打印空格和星星的个数
 * 行数	空格	  星星
 *  0     0      13
 *  1     1	     13
 *  2     2      13
 *  3     3      13
 *  i	  i      13
 */
// 外侧循环:控制行数
for(int i = 0; i < 6; i++) {
	// 内侧循环:控制空格
	for(int j = 0; j < i; j++) {
		System.out.print(" ");
	}
	// 内侧循环:控制星星
	for(int j = 0; j < 13; j++) {
		System.out.print("*");
	}
	System.out.println();
}

/**
 * 打印等腰三角形
 * 		 *
 *      ***
 *     *****
 *    *******
 *   *********
 * 思路: 选择嵌套循环。外侧循环控制行数,内侧循环控制空格和星星的个数!
 *  行数		  空格             星星
 *   0		 4 = 5-0-1		 1 = 2*0+1
 *   1		 3 = 5-1-1		 3 = 2*1+1
 *   2		 2 = 5-2-1		 5 = 2*2+1
 *   3		 1 = 5-3-1		 7 = 2*3+1 
 *   4		 0 = 5-4-1		 9 = 2*4+1
 *   i	     总行数-i-1         2*i+1	
 */
int length = 9;
// 外侧循环:控制行数
for(int i = 0; i < length; i++) {
	// 内侧循环:控制空格
	for(int j = 0; j < length - i - 1; j++) {
		System.out.print(" ");
	}
	// 内侧循环:控制星星
	for(int j = 0; j < 2 * i + 1; j++) {
		System.out.print("*");
	}
	System.out.println();
}

/**
 * 思考:如何实现打印菱形和空心菱形???
 * 		 *
 *      ***
 *     *****
 *    *******
 *   ********* 
 *    *******
 *     *****
 *     	***
 *     	 *
 *     
 * 		 *
 *      * *
 *     *   *
 *    *     *
 *   *       * 
 *    *     *
 *     *   *
 *     	* *
 *     	 *
 */

2、 使用嵌套循环实现九九乘法表。
在这里插入图片描述

// 外侧循环:控制行数
for(int i = 1; i <= 9; i++) {
	// 内侧循环:控制列数
	for(int j = 1; j <= i; j++) {
		System.out.print(j + "*" + i + "=" + i*j + "\t");
	}
	System.out.println();
}

3、 **[难]**输入0-9之间的一个数,输出数字构成的1~5位整数的和,如输入2,则计算出2 + 22 + 222 + 2222 + 22222之和。

/**
 * 实现步骤:
 *	1.获得[0, 9]之间的正整数,假设输入的正整数num=5
 *	2.获得5,55,555,5555,5555
 *	  定义一个变量result,并设置result的初始值为0
 *    	第一趟:result *= 10;  result += num;   -->  result = 5
 * 	   	第二趟:result *= 10;  result += num;   -->  result = 55
 * 		第三趟:result *= 10;  result += num;   -->  result = 555  
 * 		第四趟:result *= 10;  result += num;   -->  result = 5555
 * 		第五趟:result *= 10;  result += num;   -->  result = 55555
 * 	  因为每一趟的代码都是一模一样,所以我们使用循环来实现,循环的次数为:5次
 *  3.定义一个变量,用于累加5,55,555,5555,5555之和 
 */
// 1.获得[0, 9]之间的正整数
Scanner input = new Scanner(System.in);
System.out.print("请输入[0, 9]之间的整数:");
int num = input.nextInt();
// 2.获得5,55,555,5555,5555
int result = 0, sum = 0;
// 每一趟循环,要求分别得到:5,55,555,5555,5555
for(int i = 0; i < 5; i++) {
	result *= 10;
	result += num;
	// 3.用于累加5,55,555,5555,5555之和 
	sum += result;
}
System.out.println("sum:" + sum);

4、**[难]**搬砖问题:36块砖,36个人搬,男搬4块,女搬3块,两个小孩搬1块,要求一次搬完,问需要男、女、小孩各多少人?

/**
 * 思路分析:
 *	 条件:男人 + 女人 + 小孩 == 36 && 男人搬砖数量 + 女人搬砖数量 + 小孩搬砖数量 == 36
 *   我们只需列举出男人、女人和小孩的人数区间范围,然后计算机依次去判断匹配即可!
 *		男人的取值范围???[0, 9]
 * 		女人的取值范围???[0, 12]
 *		小孩的取值范围???[0, 36]
 */
// 控制男人的人数
for(int x = 0; x < 9; x++) {
	// 控制女人的人数
	for(int y = 0; y < 12; y++) {
		// 控制小该的人数
		for(int z = 0; z < 36; z += 2) {
			// 满足:男人人数 + 女人人数 + 小孩人数 === 36 && 男人搬砖数 + 女人搬砖数 + 小孩搬砖数 == 36 
			if(x + y + z == 36 && x*4 + y*3 + z/2 == 36) {
					System.out.println("男人:" + x + " 女人:" + y + " 小孩:" + z);
			}
		}
	}
}

5、 **[难]**假如有一对小兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,请问每个月的兔子总数为多少对?(假设到24个月)

/**
 * 思路分析:
 *		   第一月   第二月    第三月   第四月   第五月   第六月 
 *	小兔子    1	   1	    1	    2 		3 	    5  
 *	老兔子    0	   0	    1	    1  	    2	    3
 *	总兔子    1	   1	    2	    3		5	    8
 *  规律:当前月份兔子总数 = 上个月兔子总数 + 上上个月兔子总数 
 *  第一月和第二月的兔子总数都是为1对,然后第三月到第二十四月的兔子数可以通过规律来获得
 *	获取第三个月到第二十四个月之间每个月份的兔子数,应该使用循环来实现。循环的次数22次,可以从[3, 24]之间循环。
 */
// 上上个月的兔子总数
int first = 1; // 初始值为第一个月的兔子总数
// 上个月兔子总数
int second = 1; // 初始值为第二个月的兔子总数
// 通过循环,获取第三个月到第二十四个月之间的兔子总数
for(int i = 3; i <= 24; i++) { 
	// 假设此处获取的是第i月的兔子总数
	// i月兔子总数 = i-2个月兔子总数  + i-1月兔子总数 
	int result = first + second; // result = 2
	// 更新first和second的值,为获取下一个月做准备
	first = second; 
	second = result; 			
	System.out.println("第" + i + "个月兔子数:" + result);
}

6、 **[难]**中国古代数学家研究出了计算圆周率最简单的办法:
PI=4/1-4/3+4/5-4/7+4/9-4/11+4/13-4/15+4/17… 这个算式的结果会无限接近于圆周率的值,我国古代数学家祖冲之计算出,圆周率在3.1415926和3.1415927之间,请编程计算,要想得到这样的结果,他要经过多少次…

/**
 * 思路分析:
 *   因为不确定需要计算多少次,所以采用死循环!假设循环变量为i,初始值为0
 *	 当计算出来的圆周率在:3.1415926到3.1415927之间,则跳出死循环
 *	 分析:PI=4/1-4/3+4/5-4/7+4/9-4/11+4/13-4/15+4/17......
 *		发现分子永远为4,分母规律为:2*i+1
 *		另外,当循环变量为偶数时,做累加操作;当循环变量为奇数时,做累减操作!
 */
// 定义一个变量,用于保存计算出来的圆周率
double PI = 0;
// 定义一个循环变量,初始值为0
int index = 0;
// 定义一个死循环,用于计算PI的取值
while(true) {
	// 计算圆周率的操作
	if(index % 2 == 0) { // 偶数
		PI += 4.0/(2*index+1);
	} else { // 奇数
		PI -= 4.0/(2*index+1);
	}
	// 循环变量累加
	index++;
	// 满足PI在3.1415926到3.1415927之间,则跳出死循环
	if(PI >= 3.1415926 && PI <= 3.1415927) {
		System.out.println(index);
		break;
	}
}

ps:如需最新的免费文档资料和教学视频,请添加QQ群(627407545)领取。

发布了57 篇原创文章 · 获赞 0 · 访问量 2046

猜你喜欢

转载自blog.csdn.net/zhoujunfeng121/article/details/104642852