java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > 运用java循环打印菱形

运用java以及循环打印菱形详细实例代码

作者:墨家阿碾

最近在看算法书的时候,看到有打印上三角的算法,然后要举一反三,下面这篇文章主要介绍了运用java以及循环打印菱形的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、总体简述

打印一个菱形是我们在学习编程中很常见的一个例子,今天我将在这里运用两种不同的思路来编译输出这个图形,想看完整代码可直接划到每个方法最后。

第一种,所需技术为for循环,只要你会循环嵌套就能很好理解我的代码。

第二种,所需技术在第一种基础上还需要你了解布尔类型变量以及"&&"的部分用法。

这里作为案例的菱形最大长度为17

二,第一种方法,拆分法

我们可以将这个图形差分来看,只看上半部分(前9行)是一个等腰三角形,我们会发现它每一行都比上一行多两个“*”,我们可以选择先将这部分输出出来,也就是一个简单的输出1-17中所有单数的循环,这里注意,我们要把输出数字和换行分开写,这是为了便于我们下面在以上基础上更改代码,代码及结果如下

很好,如果你已经输出了如上内容,那么你要做的就是输出这些数字对应的“*”数量,我们运用循环嵌套就会得到如下代码。

 能做到这里,我们里最终成果已经十分接近,我们下一步是在输出“*”之前输出“ ”,来使星星呈现等腰三角形形状,通过观察,我们发现这些空格也是有规律的,第一行8个,第二行7个,第三行6个……每多一行就少一个空格。为了保证循环嵌套的可行性,我们需设置m>i/2,来确保内循环不会在外循环进入下一个循环时和上一次的内循环完全一致。代码及效果如下。

现在你已经能输出一半的菱形了,同理,下半部分的原理和上半部分完全一致,只是需要改变循环内空格和星号的输出就好了。完整代码如下。

public static void main(String[] args) {
        for (int i = 1; i <= 17; i += 2) {
            for (int m = 8; m > i / 2; m -= 1) {
                System.out.print(" ");
            }
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        for (int i = 15; i >= 1; i -= 2) {
            for (int m = 1; m <= (17 - i) / 2; m++) {
                System.out.print(" ");
            }
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }

三,第二种方法,整体法

我们已知这个菱形对角线都是17个星星,那么何不将其和四角的空格看为一个整体?

就是一个17乘17的正方形,然后我们将这个正方形看成17乘17个格子。

从上往下第一横行,从左到右为8个空格,第九个格子是星号,后8个格子是空格。

第二横行,从左到右为7个空格,第8,9,10的格子是星号,后7个格子是空格。

第三横行,从左到右为6个空格,第7,8,9,10,11的格子是星号,后6个格子是空格……

我们可以将菱形最左边的星星所处位置设为startNum,将最右边星星所处位置设为endNum。

然后判定格子位于startNum和endNum所在位置及其之间的为星号,其余地方为空格。

依据for循环和if语句嵌套循环编译。

在设置一个布尔变量,用于切换上下部分输出。

代码如下。

public static void main(String[] args) {
        //先打印出一个正方形,然后某些位置上打印* 某些位置上打印空格:
        int size = 17;
        int startNum = size / 2 + 1;//起始列号
        int endNum = size / 2 + 1;//结束列号
        //引入一个布尔类型的变量---》理解为“开关”
        boolean flag = true;
        for (int j = 1; j <= size; j++) {
            //*****
            for (int i = 1; i <= size; i++) {
                if (i >= startNum && i <= endNum) {
                    System.out.print("*");
                } else {
                    System.out.print(" ");
                }
            }
            //换行
            System.out.println();
            if (endNum == size) {
                flag = false;
            }

            if (flag) {//flag是true相当于在菱形的上半侧   flag是false相当于在菱形的下半侧
                startNum--;
                endNum++;
            } else {
                startNum++;
                endNum--;
            }
        }
    }

四,结语

对于初学者建议使用第一种分解法,对于有一定基础的建议使用第二种整体法,对于代码,理解后还要自己敲几遍巩固印象。

到此这篇关于运用java以及循环打印菱形的文章就介绍到这了,更多相关运用java循环打印菱形内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文