【问题标题】:Beginner Java Controlled Loop Not Producing Expected Results初学者 Java 控制循环未产生预期结果
【发布时间】:2015-09-24 23:12:42
【问题描述】:

我正在尝试创建一个菱形(由星号制成),但是我似乎无法获得右下腿,不是吗?为什么我的代码不正确?提前致谢

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();

        }

    }
}

【问题讨论】:

    标签: java loops for-loop counter


    【解决方案1】:

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

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

    【讨论】:

    • 这成功了。我还没有学习其他对象,但是你对我现有代码的修复成功了
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多