打印菱形的偶数行

Even number of line to print diamond

我想制作带星号的菱形图案,线条需要用户给定。当行数为偶数时,我无法制作钻石。这是所有代码:

import java.util.Scanner;
public class DrawDiam {
    public static void main(String[] args) {
        System.out.println("Please give the number of lines");
        Scanner in = new Scanner(System. in );
        int L = in .nextInt();
        if (L < 4) {
            System.exit(0);
        } else {
            if ((L % 2) != 0) {
                int add = 1;
                int numOfSpaces = L / 2;
                for (int i = 1; i <= L; i++) {
                    for (int j = numOfSpaces; j >= 1; j--) {
                        System.out.print(" ");
                    }
                    for (int j = 1; j <= add; j++) {
                        System.out.print("*");
                    }
                    System.out.println();
                    if (i < (L / 2 + 1)) {
                        add = add + 2;
                        numOfSpaces = numOfSpaces - 1;
                    } else {
                        add = add - 2;
                        numOfSpaces = numOfSpaces + 1;
                    }
                }
            } else {
                int add = 1;
                int numOfSpaces = L / 2;
                for (int i = 0; i <= L + 1; i++) {
                    for (int j = numOfSpaces; j >= 1; j--) {
                        System.out.print(" ");
                    }
                    for (int j = 1; j <= add - 2; j++) {
                        System.out.print("*");
                    }
                    System.out.println();
                    if (i < (L / 2 + 1)) {
                        add = add + 2;
                        numOfSpaces = numOfSpaces - 1;
                    } else {
                        add = add - 2;
                        numOfSpaces = numOfSpaces + 1;
                    }
                }
            }
        }
    }
}

所以程序要求一个数字 >=4.The 奇数部分是 运行 完美但是 L = 6 的偶数部分是这样的:

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

例如 L = 6 应该显示 this:

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

这是我的解决方案。你需要测试你是否通过了钻石的中间。如果你在 i==L/2 你在中间并且不增加添加或 numOfSpaces

public static void main(String[] args) {
    System.out.println("Please give the number of lines");
    Scanner in = new Scanner(System.in);
    int L = in.nextInt();
    if (L < 4) {
        System.exit(0);
    } else {
        if ((L % 2) != 0) {
            int add = 1;
            int numOfSpaces = L / 2;
            for (int i = 1; i <= L; i++) {
                for (int j = numOfSpaces; j >= 1; j--) {
                    System.out.print(" ");
                }
                for (int j = 1; j <= add; j++) {
                    System.out.print("*");
                }
                System.out.println();
                if (i < (L / 2 + 1)) {
                    add = add + 2;
                    numOfSpaces = numOfSpaces - 1;
                } else {
                    add = add - 2;
                    numOfSpaces = numOfSpaces + 1;
                }
            }
        } else {
            int add = 1;
            int numOfSpaces = L / 2;
            for (int i = 0; i < L + 1; i++) {
                for (int j = numOfSpaces; j >= 1; j--) {
                    System.out.print(" ");
                }
                for (int j = 1; j <= add - 2; j++) {
                    System.out.print("*");
                }
                System.out.println();
                if (i < (L / 2)) {
                    add = add + 2;
                    numOfSpaces = numOfSpaces - 1;
                }
                // Edit your else block here:
                else if (i > (L / 2)) {
                    add = add - 2;
                    numOfSpaces = numOfSpaces + 1;
                }
                // End of edit!
            }
        }
    }
}

最后别忘了关闭Scanner,需要检测"i"什么时候是"L"的中间,去掉中间的两行之一(由例如4/2=2,所以中间就是其中的2和3)。

此代码有效:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        System.out.println("Please give the number of lines");
        Scanner in = new Scanner(System. in );
        int L = in .nextInt();
        if (L < 4) {
            System.exit(0);
        } else {
            int midp = (L/2)+1;
            int midm = (L/2)-1;
            if ((L % 2) != 0) {
                int add = 1;
                int numOfSpaces = L / 2;
                for (int i = 1; i <= L; i++) {
                    for (int j = numOfSpaces; j >= 1; j--) {
                        System.out.print(" ");
                    }    
                    for (int j = 1; j <= add; j++) {
                        System.out.print("*");
                    }
                    System.out.println();
                    if (i < (L / 2 + 1)) {
                        add = add + 2;
                        numOfSpaces = numOfSpaces - 1;
                    } else {
                        add = add - 2;
                        numOfSpaces = numOfSpaces + 1;
                    }
                }
            } else {
                int add = 1;
                int numOfSpaces = L / 2;
                for (int i = 0; i <= L + 1; i++) {
                    if(i != midm){
                        for (int j = numOfSpaces; j >= 1; j--) {
                            System.out.print(" ");
                        }
                        for (int j = 1; j <= add - 2; j++) {
                            System.out.print("*");
                        }
                        System.out.println();
                        if(i == midp){

                        } else if (i < (L / 2 + 1)) {
                            add = add + 2;
                            numOfSpaces = numOfSpaces - 1;
                        } else {
                            add = add - 2;
                            numOfSpaces = numOfSpaces + 1;
                        }
                    }
                }
            }
        }
        in.close();
    }
}