Java中的星号三角形

时间:2014-06-30 04:31:41

标签: java loops for-loop geometry

我正在尝试用星号制作可缩放的三角形,并且我已经获得了完全功能的所有代码,并且正确地调整了大小,但它并没有输出三角形的第三面。欢迎任何建议。

    import java.util.Scanner;

    class Triangle {
    public static void main(String[] args){

        Scanner a;
        a = new Scanner(System.in);

        System.out.println("Welcome to the Scalable Triangle program!");
        System.out.print("What size triangle do you want?");
        int size = a.nextInt();
        for (int j = 0; j < (size - 1); j++)
          System.out.print(" ");
        System.out.println("*");
        //top line
        for (int j = 1; j < (size - 1); j++)
        {
          for (int k = 0; k < (size - 1 - j); k++)
          System.out.print(" ");
          System.out.println("*");
        }
        for (int j = 0; j < size ; j++)
           System.out.print("* ");
        System.out.println(" ");
        //bottom line
      }
    }

如果我用例如7:

回答问题,我希望输出这个
          *
         * *
        *   *
       *     *  
      *       *
     *         *
    * * * * * * *

现在它会输出:

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

3 个答案:

答案 0 :(得分:1)

好的,所以我快速浏览一下,之所以不打印第三面是因为你没有打印代码。

您要查看的位是嵌套循环(您正在使用的第二个j计数器)。目前,嵌套循环(使用k计数器的循环)正在输出x之前的空格。

      *
     x 
    x   
   x       
  x       
 x         
* * * * * * *

你想要做的是改变

System.out.println("*");

在该循环中不开始新行。

然后在此之后添加另一个循环以添加空格和星号。对于这个星号,您需要将其输出为新行。

由于这看起来像是一项家庭作业,我不会给你任何代码来做。这应该是足够的信息,以帮助您弄明白。请记住,始终一次跟踪代码1行,以便了解它正在做什么。

另外,请注意您可能添加的任何额外空格。如果这是一项家庭作业,您将希望输出与提供的输出完美匹配。

祝你好运。

答案 1 :(得分:0)

尝试在行号,空格数,星数等之间得到一些数学关系,如下所示:

行号:第一颗星后的空格数。

      *
    1* *1
   2*   *3
  3*     *5  
 4*       *7
5*         *9
* * * * * * *

如果第一个星之后的空格数= x且行数= y。然后 x = 2y-1

代码:

public class Dia {

    public static void main(String[] args) {

        System.out.println(drawTriangle("*", 7));

    }// main

    // Assume equilateral triangle
    public static String drawTriangle(String symbol, int side) {
        StringBuilder sb = new StringBuilder();

        int i = 0;

        //Top line
        for(i = 1; i < side; i++){sb.append(" ");}
        sb.append(symbol);
        sb.append("\n");

        for(i = 1; i < side-1; i++){
            for(int j = 1; j < side-i; j++){sb.append(" ");}
            sb.append(symbol);

            for(int k = 1; k <= (i * 2)- 1 ; k++){sb.append(" ");}
            sb.append(symbol);
            sb.append("\n");

        }

        //Bottom line
        for(i = 0; i < side; i++){sb.append(symbol + " ");}

        return sb.toString();

    }

}

答案 2 :(得分:0)

这会对你有所帮助。

import java.util.Scanner;

class Triangle {
public static void main(String[] args){

    Scanner a;
    a = new Scanner(System.in);

    System.out.println("Welcome to the Scalable Triangle program!");
    System.out.print("What size triangle do you want?");
    int size = a.nextInt();
    for (int j = 0; j < (size - 1); j++)
      System.out.print(" ");
    System.out.println("*");
    //top line
    for (int j = 1; j < (size - 1); j++)
    {
      for (int k = 0; k < (size - 1 - j); k++)
      System.out.print(" ");
      System.out.print("*");
      for (int m = 0; m < 2*j-1; m++){
              System.out.print(" ");
        }
       System.out.println("*");
    }
    for (int j = 0; j < size ; j++)
       System.out.print("* ");
    System.out.println(" ");
    //bottom line
  }
}