• 使用Java的嵌套循环打印出平行四边形、等腰三角形、棱形、矩形的星星图案(Java工程师面试必备)


    第一遍是看了视频,听老师讲解嵌套循环的使用,然后到星星图形这一步,当时都觉得听明白了,但是自己去做,就是写不出来

    第二遍看了赵老师的教程,看了好熟悉的感觉,还是自己写不出来

    第三遍找网上关于图形的嵌套循环讲解,说实话,每个例子都好烂,而且还有错误

    第四遍,昨晚上回到家,看了2<欢乐颂>后,觉得想不通心里实在难受的慌,就跟不做开发已经几年的老公请教了一下。。被教导说你先要理解什么是嵌套循环,嵌套循环是怎么执行的。。。balabala.......

    第五遍,自己又去分析思路,感觉上有点开窍了,那4个图形,矩形、等腰三角形、平形四边形、棱形

    分析思路:

    1平形四边形:

             *****

           *****

         *****

       *****

     *****

    首先,我总体是要运行5行的,这是第一层的循环

    然后,第一行的循环,包括4个空格+5颗星

    .......

    根据视频中老师的教法,还是弄个列表好看一些

    行   =   空格   +  

    1        4         5

    2        3         5

    3        2         5

    4        1         5

    5        0         5

    分析上面这个公式:

    1列,行数是自增的,12345给它弄个for循环啦for(int i=1;i<=5;i++)

    2列和第3列,是同一层的,所以注意循环语法的位置,但他们都是第1列的里面的东西,你可以认为第1列是和,第2和第3列是组成第1列的元素,所以第1列的for应该是最外层的

    那么第2列空格,要找一个与现有变量i和已知行数能扯上关系,且每行都通用的表达式,5-i 不就是吗。那么,第2列,我第一次执行4次,每次输出一个空格,第二次。。。。。。以此类推

    3列星,固定都是5,都不想再说什么了,直接循环5次,每次取1颗星呗

    代码如下:

    For(int i=1;i<=5;i++){
    
       For(int j=1;j<=(5-i);j++){
    
          System.out.print(“ ”);//每次打印1个空格,根据j的值,来确定每次空格的数量
    
       }
    
       For(int k=1;k<=5;k++){
    
         System.out.print(“*”);//每次打印1颗星,它要循环5层,就是5颗星
    
       }
    
    System.out.println();//每一行后,我要换行
    
    }
    

    2、矩形

    这个本身比较简单,都不太想列。就是每行5颗星

    第一行用个循环输出5颗星,需要输5行,那就外面再加一层循环吧!

    这里要注意,每一行的换行,是放在外层循环里,和输出的每一行是同级的

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

    3、等腰三角形

              *

            ***

          *****

        *******

      *********

    ***********

    还是一样的分析步骤,一共有6行,第一行由空格和*组成,

    行   =   空格   +  

    1        5 =6-1       1 =2*1-1

    2        4 =6-2       3=2*2-1

    3        3 =6-3       5=2*3-1

    4        2 =6-4       7=2*4-1

    5        1 =6-5       9=2*5-1

    6        0 =6-6       11=2*6-1

    这次,星星和空格的循环次数都不是固定的,都需要与i的值来扯上点关系,发挥你的想像找个与I相关的表达式吧

    看上图,空格的循环总次数每一行应该是6-i

    星星,也要扯个表达式与i或空格相关:2*i-1

    好啦,找表达式,也是个脑力活,我这脑子明显不够用了!!!!

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

    4、棱形:切,不就是2个等腰三角形嘛,分解成2个等腰三角形,同层连接起来不就行了嘛

                  *

                ***

              *****

            *******

          *********

        *********** 从这里上半部分我们在等腰三角形中已打印出来了,就只用再把下面打出来

          *********

            *******

              *****

                ***

                  *

    一样的分析步骤:

    行    空格    星

    1     1       9 =9-2*(1-1)

    2     2       7=9-2*(2-1)

    3     3       5=9-2*(3-1)

    4     4       3=9-2*(4-1)

    5     5       1=9-2*(5-1)

    		for(int i=1;i<=6;i++){
    			for(int j=1;j<=6-i;j++){
    				System.out.print(" ");
    			}
    			for(int k=1;k<=(2*i)-1;k++){
    				System.out.print("*");
    			}
    			System.out.println();
    		}
    		for(int a=1;a<=5;a++){
    			for(int b=1;b<=a;b++){
    				System.out.print(" ");
    			}
    			for(int c=1;c<=9-2*(a-1);c++){
    				System.out.print("*");
    			}
    			System.out.println();
    		}
    //倒三角也可以这样写:
            for(int j=4;j>0;j--){
    			for(int k=1;k<=5-j;k++){
    				System.out.print(" ");
    			}
    			for(int a=1;a<=2*j-1;a++){
    				System.out.print("*");
    			}
    			System.out.println();
    		}
    

      

    总结:那个星星的表达式好难找。。。。这跟小学2年级暑假作业上的算术题一样难。。。。

  • 相关阅读:
    container宽度
    NO.14 两个div并排,左边为绝对宽度,右边为相对宽度
    CSS3旋转图片效果收集
    背景图片问题
    CSS动画
    前端比较有用的网址
    JS如何判断IE和火狐与Chrome浏览器
    JAVA多线程面试题目
    JAVA多线程之Semaphore
    阿里多线程笔试题
  • 原文地址:https://www.cnblogs.com/sincoolvip/p/5412892.html
Copyright © 2020-2023  润新知