嵌套循环练习:打印三角,九九乘法表,质数,质数优化

目录

打印三角

打印九九乘法表

100以内的所有质数

质数输出问题的优化


在JAVA中,如何跳出当前的多重嵌套循环?

答:用break或return 的方式。

1.输出:以下图形:
        ******
        ******
        ******
        ******

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

2.     打印三角:

        *            
        **           
        ***            
        ****        
        *****        
        ******        
       

        /*			i(行数)  j(*的个数)
		*			1		 1
		**			2		 2
		***			3		 3
		****		4		 4
		*****		5		 5
		******		6		 6
		*/
		for(int i=1;i<=6;i++){//控制行数
			for(int j=1;j<=i;j++){//控制每一行有几个星:控制列数
				System.out.print("*");
			}
			System.out.println();
		}

3. 
        ******           
        *****        
        ****        
        ***            
        **         
        *           
      

        /*			i(行数)  j(*的个数)
		******		1		 6            规律:i+j = 7换句话数:j=7-i;        
		*****		2		 5
		****		3  		 4	
		***			4		 3
		**			5		 2
		*			6		 1
		*/
		/*for(int i=1;i<=6;i++){//控制行数
			for(int j=6;j>=i;j--){//控制每一行有几个星:控制列数
				System.out.print("*");
			}
			System.out.println();
		}*/
		for(int i=1;i<=6;i++){//控制行数
			for(int j=1;j<= 7-i;j++){//控制每一行有几个星:控制列数
				System.out.print("*");
			}
			System.out.println();
		}

4.     *
        **
        ***
        ****
        *****
        ******
        *****
        ****
        ***
        **
        *

        /*
		*
		**
		***
		****
		*****
		******
		*****
		****
		***
		**
		*
		这个需要两个不同的嵌套循环,一个增加,一个减少,一个正三角加一个倒三角
		
		在开发中嵌套循环最多三层,一般常见的是两层,三层也不会多见,编写代码时需要注意;
		嵌套太多容易混乱,也证明编写有问题,最好不要。
		
		如下边代码所示:
		*/
		//正三角
		for(int i=1;i<=6;i++){//控制行数
			for(int j=1;j<=i;j++){//控制每一行有几个星:控制列数
				System.out.print("*");
			}
			System.out.println();
		}
		//倒三角
		for(int i=1;i<=5;i++){//控制行数
			for(int j=1;j<= 6-i;j++){//控制每一行有几个星:控制列数
				System.out.print("*");
			}
			System.out.println();
		}

5.       * 
         * * 
        * * * 
       * * * * 
      * * * * * 
       * * * * 
        * * * 
         * * 
          * 

/*        图1                                  图2
		
	      *                                 ----* 
         * *                                ---* * 
        * * *                               --* * *    ---->上半部分:两个三角
       * * * *                              -* * * * 
      * * * * * ------转变图形为:图2------> * * * * *
       * * * *                              
        * * *                               -* * * *    ------>下半部分:两个三角
         * *                                --* * *
          *                                 ---* *
                                            ----*
		
		*/
		//上半部分
		for(int i=1;i<=5;i++){
			for(int j=1;j<=5-i;j++){
				System.out.print(" ");//System.out.print("-");
			}
			for(int z=1;z<=i;z++){
				System.out.print("*"+" ");
			}
			System.out.println();
		}
		
		//下半部分
		for(int i = 1;i <= 4;i++){
			for(int j = 1;j <= i;j++){
				System.out.print(" ");//System.out.print("-");
			}
			for(int z = 1;z <= 5-i;z++){
				System.out.print("*"+" ");
			}
			System.out.println();
		}

6.打印九九乘法表

/*
嵌套循环的应用1:


九九乘法表
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

*/

class NineNineTable{
	public static void main(String[] args){
		int sum=0;
		for(int i = 1;i<=9;i++){
			for(int j=1;j<=i;j++){
				
			sum = i*j;
	System.out.print(i+"*"+j+"="+sum +" ");//System.out.print(i+"*"+j+"="+i*j+" ");
			}
			System.out.println();
		}
		
		
	}
}

7.

100以内的所有质数


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

如:一个数n  ---->n能被1整除 从2,3,4,.... n-1,都不能被整除,最后n他自己可以被整除

最小的质数是:2

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

如:一个数n  ---->n能被1整除 从2,3,4,.... n-1,都不能被整除,最后n他自己可以被整除

最小的质数是:2

*/

class PrimeNumberTest{
	public static void main(String[] args){
	
		for(int i=2;i <= 100;i++){//遍历100以内的自然数
		
			boolean isFlag = true;//标识i能否被j除尽,一旦除尽,修改其值;同时重置isFlag的值
			
			for(int j=2;j<i;j++){//j:被i去除
				
				/*
                    解析:
                  >if语句时,每一次循环只会输出符合条件的执行语句,每一次循环i都会和每一个j进行            
                      一次运算;
				  >if-else增加了一个选择,每次循环时,else也会执行一次,
				   当满足一次else时,会结束循环,往后的j将不会在与i进行计算;
				   例如 9:它会被认为是质数,这是不对的,程序只对于2进行了计算,输出的是不会被2整            
                       除的数,更像是在计算奇数
				  >所以,if语句可以在循环中每一个j都会与i进行取模运算,
                   只要出现一个能够被除尽的j,那么他会执行isFlag = false语句进行标记,
                   也意味着这个i不是质数不会进行最后的输出
				*/
				if(i%j==0){//i被j除尽,
					isFlag = false;
					break;
				}
			}
			if(isFlag==true){
				System.out.print(i+" ");
			}
			
		}
	}
}

8.质数输出问题的优化

如何计算程序运行所花费的时间?

需要使用:System.currentTimeMillis() :这个方法代表获取当前时间距离1970-01-01 00:00:00 的毫秒数

位于API文档:System class下: currentTimeMillis()方法是 long类型的

 程序运行时间需要在程序运行首尾都运行该语句,并得出初始时间值和结束时的时间值,二者相见得出程序运行的时间

long start = System.currentTimeMillis();//开始时间

long end = System.currentTimeMillis();//结束时间

System.out.println("程序运行所花费的时间:"+(end - start));

不同的算法对于程序运行的时间有较大差距:

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

如:一个数n  ---->n能被1整除 从2,3,4,.... n-1,都不能被整除,最后n他自己可以被整除

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

*/

class PrimeNumberTest1{
	public static void main(String[] args){
		
		int count = 0;//10万以内的质数个数
		
		//获取当前时间距离1970-01-01 00:00:00 的毫秒数
		long start = System.currentTimeMillis();
	
		for(int i=2;i <= 100000;i++){//遍历100000以内的自然数
		
			boolean isFlag = true;//标识i能否被j除尽,一旦除尽,修改其值;同时重置isFlag的值
			
			
			//for(int j=2;j<i;j++){//j:被i去除
			
			//优化二:对本身是质数的自然数是有效的
for(int j=2;j<= Math.sqrt(i);j++){//----根号i(√i)在代码中表示:Math.sqrt(i):表示开方的意思
			
/*---------------------------------------------------------------------
为什么√i就可以了呢?
以2-100为例:100=2*50;从50为界2-50他们的在100内都有对应的倍数,大于50的数的倍数要大于100
x*X<=100(x<X)-->x和X取值范围一定<=50,100开方为10,10*10=100;2*50=100;则:2<=x<=10,10<=X<=50
对与乘法运算:2*50=10*10;2,10为100的因数,在程序中2运算后之后,则不必在一直执行到j=50;对于质数和非质数都适用
所以根号i(√i)可以使用
				-------------------------------------------------------------------------*/
				
				if(i%j==0){//i被j除尽,
					isFlag = false;
					break;//优化一:只对本事非质数的自然数是有效的。 
				}
			}
			if(isFlag==true){
				count++;//9592
				//System.out.print(i+" ");
			}
			
		}
		System.out.println("-----------");
		//获取当前时间距离1970-01-01 00:00:00 的毫秒数
		long end = System.currentTimeMillis();
		
        //将输出质数换count++后时间:17969 -- 优化一:break:1497 -- 优化二:14
        System.out.println("质数的个数为:"+count);
        
        //时间:20105 -- 优化一:break:2585 -- 优化二:1014
		System.out.println("程序运行所花费的时间:"+(end -start));

	}
}

9.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3。编程 找出1000以内的所有完数。(因子:除去这个数本身的其它约数)

class ForForExer{
	public static void main(String[] args){
		System.out.println("i=");
		for(int i = 1;i<=1000;i++){
			int sum =0;//每内循环结束,归0
			for(int j = 1;j<i;j++){
				if(i % j==0){
					sum += j;//计算因数的和
				}	
			}
			if(i == sum){
				System.out.println(i);//i=6 28 496
			}
		}
	}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值