打印实心和空心钻石(菱形)

总体分析:

  首先,不论打印平面图形或者3D图形,都是采用分层打印的方法;对于程序打印平面规律图形来说,可以利用双重循环进行打印,外层循环控制打印的层数,内层循环控制每一层打印的内容,当打印完一层后,就换行打印下一层。

1:打印实心钻石

  代码如下:

package net.algchallenge;

import java.util.Scanner;

public class PrintSolidDiamond {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //注意:因为是同一行要打印多个空白和星星,所以要利用System.out.print();然后当打印了钻石的一行的时候就启动换行,不然所有的空白和星星都在同一行里
        while (true) {
            System.out.print("row = ");
            int row = sc.nextInt();//定义钻石的行数
            if (row % 2 == 0) {//如果钻石的行数为偶数
                row++;//钻石行数为偶数时,行数+1,就可以实现行数为奇数时的上下对称情况
                for (int i = 1; i <= row; i++) {
                    if (i <= row / 2) {
                        for (int j = 1; j <= row / 2 - i + 1; j++) {//打印空白:当打印的是钻石的上层时,空白的个数成递减趋势,所以要使用row - i的形式
                            System.out.print(" ");
                        }
                        for (int j = 1; j <= 2 * i - 1; j++) {
                            System.out.print("*");//打印星星:当打印的是钻石上层的时候,星星个个数成递增趋势,并且每一行的个数为2*i-1
                        }
                        System.out.println();
                    } else {//打印下层的星星和空白,可根据上层推导而来
                        for (int j = 1; j <= i - (row / 2 + 1); j++) {
                            System.out.print(" ");
                        }
                        for (int j = 1; j <= 2 * (row - i) + 1; j++) {
                            System.out.print("*");
                        }
                        System.out.println();
                    }
                }
            } else {//如果钻石的行数为奇数
                for (int i = 1; i <= row; i++) {
                    if (i <= row / 2) {
                        for (int j = 1; j <= row / 2 - i + 1; j++) {
                            System.out.print(" ");
                        }
                        for (int j = 1; j <= 2 * i - 1; j++) {
                            System.out.print("*");
                        }
                        System.out.println();
                    } else {
                        for (int j = 1; j <= i - (row / 2 + 1); j++) {
                            System.out.print(" ");
                        }
                        for (int j = 1; j <= 2 * (row - i) + 1; j++) {
                            System.out.print("*");
                        }
                        System.out.println();
                    }
                }
            }
        }
    }
}

效果如图:
在这里插入图片描述

2:打印空心钻石

  分析:打印空心钻石相比实心钻石没有太大区别,只是在打印每一层具体内容的时候,加了一些判断条件。
代码如下:

package net.algchallenge;

import java.util.Scanner;

public class PrintHollowDiamond {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.print("row = ");
            int row = sc.nextInt();
            if (row % 2 != 0) {
                for (int i = 1; i <= row; i++) {
                    if (i <= row / 2) {
                        for (int j = 1; j <= row / 2 - i + 1; j++) {
                            System.out.print(" ");
                        }
                        for (int j = 1; j <= 2 * i - 1; j++) {
                            if (i > 1 && i <= row / 2) {
                                if (j > 1 && j < 2 * i - 1) {
                                    System.out.print(" ");
                                } else {
                                    System.out.print("*");
                                }
                            } else {
                                System.out.print("*");
                            }
                        }
                        System.out.println();
                    } else {
                        for (int j = 1; j <= i - (row / 2 + 1); j++) {
                            System.out.print(" ");
                        }
                        for (int j = 1; j <= 2 * (row - i) + 1; j++) {
                            if (i >= row / 2 + 1 && i < row) {
                                if (j > 1 && j < 2 * (row - i) + 1) {
                                    System.out.print(" ");
                                } else {
                                    System.out.print("*");
                                }
                            } else {
                                System.out.print("*");
                            }
                        }
                        System.out.println();
                    }
                }
            } else {
                row++;
                for (int i = 1; i <= row; i++) {
                    if (i <= row / 2) {
                        for (int j = 1; j <= row / 2 - i + 1; j++) {
                            System.out.print(" ");
                        }
                        for (int j = 1; j <= 2 * i - 1; j++) {
                            if (i > 1 && i <= row / 2) {
                                if (j > 1 && j < 2 * i - 1) {
                                    System.out.print(" ");
                                } else {
                                    System.out.print("*");
                                }
                            } else {
                                System.out.print("*");
                            }
                        }
                        System.out.println();
                    } else {
                        for (int j = 1; j <= i - (row / 2 + 1); j++) {
                            System.out.print(" ");
                        }
                        for (int j = 1; j <= 2 * (row - i) + 1; j++) {
                            if (i >= row / 2 + 1 && i < row) {
                                if (j > 1 && j < 2 * (row - i) + 1) {
                                    System.out.print(" ");
                                } else {
                                    System.out.print("*");
                                }
                            } else {
                                System.out.print("*");
                            }
                        }
                        System.out.println();
                    }
                }
            }
        }
    }
}

效果如图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yeyu_xing/article/details/105794520