偶数行打印钻石

时间:2015-10-19 21:17:42

标签: java nested-loops

我想用星号制作菱形图案,并且必须由用户给出它的线条。当线数是偶数时,我有问题制作钻石。这就是所有代码:

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;
                    }
                }
            }
        }
    }
}

所以程序要求一个数字&gt; = 4.奇数部分运行完美,但L = 6的偶数部分出现如下:

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

例如L = 6应显示this

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

2 个答案:

答案 0 :(得分:1)

这是我的解决方案。你需要测试你是否通过了钻石的中间。如果你在(i == L / 2)你的中间并且不增加add或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;
                 }

在此处编辑您的其他屏幕:

                else if (i > (L / 2))
                 {
                     add = add - 2;
                     numOfSpaces = numOfSpaces + 1;
                 }

编辑结束!

                }
         }
     }
 }

答案 1 :(得分:0)

不要忘记最后关闭扫描仪,你需要检测何时“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();
    }
}