Java星型模式程序不发送预期输出

时间:2015-03-23 18:35:19

标签: java

处理一个java程序,该程序应该将偶数作为输入,并打印出带空格的星号符号的星形图案。我有一个6输入,但没有更高,并没有线索为什么。

我的代码:

package starpattern;

import java.util.Scanner;

public class StarPattern {

    public static void main(String[] args) 
    {
        int rows, cols;
        Scanner keyboard = new Scanner(System.in);

        System.out.print("How many columns? ");
        cols = keyboard.nextInt();

        if (cols%2 == 0)
        {
            int col2 = cols;
            int spaces = (cols/2 - 1);
            int ASTS = 2;
                        int test = (col2/2);
                        while (cols > (col2/2))
            {
                for (int x = spaces; x > 0; x--)
                {
                    System.out.print(" ");
                }
                for (int y = ASTS; y > 0; y--)
                    {
                        System.out.print("*");
                    }
                for (int z = spaces; z > 0; z --)
                {
                    System.out.print(" ");
                }
                System.out.println();
                cols--;
                ASTS +=2;
                spaces--;
            }
                        spaces = (cols/2 - 1);
            while (cols > 0)
            {

                if (test != (col2/2))
                                {
                                    for (int x = spaces; x < (cols/2); x++)
                                    {
                                            System.out.print(" ");
                                    }
                                    spaces -=2;

                                }



                                for (int a = ASTS-2; a > 0; a--)
                {
                    System.out.print("*");

                }
                                test++;
                                System.out.println();
                                cols--;
                ASTS -= 2;


            }
                }
    }
}

每一步(10,12,......)都有某种形式的同一问题。有没有办法可以在下半部分解决这个问题(从&#34开始;而cols&gt; 0&#34;)这样它可以提供正确的空格输出?

2 个答案:

答案 0 :(得分:2)

enter image description here

------智能编码------良好的编码器

**Very Simplest Way To create Paramid use only three loops**  

D:\ Java&gt; java ParamidExample 输入一个数字 5

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

import java.util.*;
public class ParamidExample
{
    public static void main(String args[])
    {
        System.out.println("Enter a number");
        Scanner sc=new Scanner(System.in);
        int no=sc.nextInt();

        int count=1;
        for(int i=1;i<=2*no-1;i++)
        {
            for(int j=count;j<=no;j++)
            {
                System.out.print("  "); 
            }
            for(int k=1;k<=count*2-1;k++)
            {
                System.out.print("* ");
            }
        if(i<no)
            count++;
        else
            count--;
                System.out.println(""); 
        }
    }
}

非常简单的方法创建Paramid只使用三个循环

答案 1 :(得分:0)

我试图找到你在代码中实际做的事情,但它有点矫枉过正:)。也许你的反向方法完全错了,它只是硬编码才能用于6号。

但是我很感激你的努力,我可以告诉你,如何更好地写它。这是Java中完全可用的代码:

public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    System.out.print("How many rows? ");
    int rows = keyboard.nextInt();

    triangle(rows);
    triangleReversed(rows);
}

private static void triangle(int n) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            System.out.print(" ");
        }
        for (int j = 0; j < i * 2 + 1; j++) {
            System.out.print("*");
        }
        System.out.println("");
    }
}

private static void triangleReversed(int n) {
    for (int i = n-1; i >= 0; i--) {
        for (int j = 0; j < n - i - 1; j++) {
            System.out.print(" ");
        }
        for (int j = 0; j < i * 2 + 1; j++) {
            System.out.print("*");
        }
        System.out.println("");
    }
}    

使用此示例输出:

How many rows? 12
           *
          ***
         *****
        *******
       *********
      ***********
     *************
    ***************
   *****************
  *******************
 *********************
***********************
***********************
 *********************
  *******************
   *****************
    ***************
     *************
      ***********
       *********
        *******
         *****
          ***
           *

请注意,将程序分成方法以提高可读性是很好的。另请注意,方法triangle和triangleReversed几乎完全相同,它只在第一行上有所不同。