2.5.7-嵌套循环的使用

嵌套循环的使用

1.嵌套循环:将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环

外层循环:循环结构B
内层循环:循环结构A

3.说明
① 内层循环结构遍历一遍,只相当于外层循环循环体执行了一次
② 假设外层循环需要执行m次,内层循环需要执行n次。此时内层循环的循环体一共执行了m * n次

4.技巧:
外层循环控制行数,内层循环控制列数

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

```
//******
//System.out.println("******");
for(int i = 1;i <= 6;i++){
	System.out.print('*');
}

System.out.println("\n");

/*
******
******
******
******
*/
for(int j = 1;j <= 4;j++ ){
	for(int i = 1;i <= 6;i++){
		System.out.print('*');
	}
	System.out.println();
}

/*			i(行号)		j(*的个数)
*			1			1
**			2			2
***			3			3
****		4			4
*****		5			5
*/

for(int i = 1;i <= 5;i++){//控制行数
	for(int j = 1;j <= i;j++){//控制列数
		System.out.print("*");
	
	}
	System.out.println();
}

/*			i(行号)		j(*的个数)   规律:i + j = 5 换句话说:j = 5 - i;
****		1			4
***			2			3
**			3			2
*			4			1
*/	

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

/*
*
**
***
****
*****
****
***
**
*
*/

//略
```

/*

     * 
    * * 
   * * * 
  * * * * 
 * * * * *
  * * * *
   * * *
    * * 
     *
*/

	//上半部分


	//下半部分
		
	}

}

嵌套循环的应用1:

九九乘法表
1 * 1 = 1
2 * 1 = 2 2 * 2 = 4
。。。
9 * 1 = 9 。。。 9 * 9 = 81

class NineNineTable {
	public static void main(String[] args) {
		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以内的所有质数的输出。

质数:素数,只能被1和它本身整除的自然数。–>从2开始,到这个数-1结束为止,都不能被这个数本身整除。

最小的质数是:2

1、方法1

class PrimeNumberTest {
	public static void main(String[] args) {
		boolean isFlag = true;//标识i是否被j除尽,一旦除尽,修改其值
		
		for(int i = 2;i <= 100;i++){//遍历100以内的自然数
		
			for(int j = 2;j < i;j++){//j:被i去除
				if(i % j == 0){ //i被j除尽
					isFlag = false;
				}
				
			}
			
			if(isFlag == true){
				System.out.println(i);
			}
			//重置isFlag
			isFlag = true;
		
		}
	}

}

100000以内的所有质数的输出。实现方式一
质数:素数,只能被1和它本身整除的自然数。–>从2开始,到这个数-1结束为止,都不能被这个数本身整除。

对PrimeNumberTest.java文件中质数输出问题的优化

2、方法2,优化

class PrimeNumberTest1 {
	public static void main(String[] args) {
		boolean isFlag = true;//标识i是否被j除尽,一旦除尽,修改其值
		int count = 0;//记录质数的个数
	
		//获取当前时间距离1970-01-01 00:00:00 的毫秒数
		long start = System.currentTimeMillis();
	
		for(int i = 2;i <= 100000;i++){//遍历100000以内的自然数
			
			//优化二:对本身是质数的自然数是有效的。
			//for(int j = 2;j < i;j++){
			for(int j = 2;j <= Math.sqrt(i);j++){//j:被i去除
				
				if(i % j == 0){ //i被j除尽
					isFlag = false;
					break;//优化一:只对本身非质数的自然数是有效的。
				}
				
			}
			//
			if(isFlag == true){
				//System.out.println(i);
				count++;
			}
			//重置isFlag
			isFlag = true;
		
		}
	
		//获取当前时间距离1970-01-01 00:00:00 的毫秒数
		long end = System.currentTimeMillis();
		System.out.println("质数的个数为:" + count);
        //17110 - 优化一:break:1546 - 优化二:13
		System.out.println("所花费的时间为:" + (end - start));
	}

}

100000以内的所有质数的输出。实现方式二
质数:素数,只能被1和它本身整除的自然数。–>从2开始,到这个数-1结束为止,都不能被这个数本身整除。

对PrimeNumberTest.java文件中质数输出问题的优化

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

		int count = 0;//记录质数的个数
	
		//获取当前时间距离1970-01-01 00:00:00 的毫秒数
		long start = System.currentTimeMillis();
	
		label:for(int i = 2;i <= 100000;i++){//遍历100000以内的自然数
			
			for(int j = 2;j <= Math.sqrt(i);j++){//j:被i去除
				
				if(i % j == 0){ //i被j除尽
					continue label;
				}
				
			}
			//能执行到此步骤的,都是质数
			count++;
		
		}
	
		//获取当前时间距离1970-01-01 00:00:00 的毫秒数
		long end = System.currentTimeMillis();
		System.out.println("质数的个数为:" + count);
		System.out.println("所花费的时间为:" + (end - start));//17110 - 优化一:break:1546 - 优化二:13
	
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值