初学者Java控制循环未产生预期结果

初学者Java控制循环未产生预期结果,java,loops,for-loop,counter,Java,Loops,For Loop,Counter,我正在尝试创建一个由星号组成的钻石形状,但是我似乎不能得到右下角的腿不正确?为什么我的代码不正确?提前谢谢 import java.util.Scanner; public class Diamond { public static void main(String[] args) { System.out.println("Enter the size of the diamond and press enter:"); Scanner

我正在尝试创建一个由星号组成的钻石形状,但是我似乎不能得到右下角的腿不正确?为什么我的代码不正确?提前谢谢

import java.util.Scanner;
public class Diamond 
{
    public static void main(String[] args)
    {
        System.out.println("Enter the size of the diamond and press enter:");    
        Scanner kb = new Scanner(System.in);
        int N = kb.nextInt();

        for (int c0 = 1; c0 <= N; c0++)     // establishes the number of lines in the diamond                
        {

            for (int c1 = 0; c1 <= N-1-c0; c1++) System.out.print(" "); // establishes the number of spaces before each asterisk
            System.out.print("*");

            for (int c2 = 3; c2 <= c0*2; c2++) System.out.print(" "); //adds a space between both asterisks. This boolean check repeats for each line
            System.out.print("*");
            System.out.println();

        }

        for (int c0 = 1; c0 <= N; c0++)   // establishes the number of lines in the diamond                
        {

            for (int c1 = N; c1 >= N+2-c0; c1--) System.out.print(" "); // establishes the number of spaces before each asterisk
            System.out.print("*");

            for (int c2 = N*2; c2 >= c0+2; c2--) System.out.print(" "); //adds a space between both asterisks. This boolean check repeats for each line
            System.out.print("*");
            System.out.println();

        }

    }
}

我稍微调整了一下你的程序。。。你需要做更多的工作来去掉一些额外的星号。至少它会给你更多的想法:

import java.util.Scanner;
public class Diamond 
{
    public static void main(String[] args)
    {
        System.out.println("Enter the size of the diamond and press enter:");    
        Scanner kb = new Scanner(System.in);
        int N = kb.nextInt();

        for (int c0 = 1; c0 <= N; c0++)     // establishes the number of lines in the diamond                
        {

            for (int c1 = 0; c1 <= N-1-c0; c1++) System.out.print(" "); // establishes the number of spaces before each asterisk
            System.out.print("*");

            for (int c2 = 3; c2 <= c0*2; c2++) System.out.print(" "); //adds a space between both asterisks. This boolean check repeats for each line
            System.out.print("*");
            System.out.println();

        }


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

    }
}

如果你提取一个方法,事情会可读得多。但首先,

for (int c2 = N*2; c2 >= c0+2; c2--) System.out.print(" ");
应该是

for (int c2 = 0; c2 < (N-c0)*2; c2++) System.out.print(" ");
static String getSpaces(int n) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < n; i++) {
        sb.append(' ');
    }
    return sb.toString();
}
或者类似的

for (int c2 = 0; c2 < (N-c0)*2; c2++) System.out.print(" ");
static String getSpaces(int n) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < n; i++) {
        sb.append(' ');
    }
    return sb.toString();
}
你可以这样称呼它

for (int c0 = 0; c0 < N; c0++) {
    System.out.print(getSpaces(N - c0));
    System.out.print("*");
    System.out.print(getSpaces(c0 * 2));
    System.out.print("*");
    System.out.println();
}
for (int c0 = 1; c0 <= N; c0++) {
    System.out.print(getSpaces(c0));
    System.out.print("*");
    System.out.print(getSpaces((N - c0) * 2));
    System.out.print("*");
    System.out.println();
}

这就成功了。我还没有学会其他的对象,但是你对我现有代码的修复成功了