使用java绘制三角形

时间:2014-07-06 18:12:43

标签: java

我需要写一个客户身高和宽度的等腰三角形。

三角形(5,10);画得好。 三角形(10,10);画得好。 三角形(10,5);画得好。但是有三角形(6,10)我有问题。我该如何避免这个问题?你有什么建议吗?

问题在于并非所有必要的点都会被吸引。

我的代码如下。

public class triangle1 {
    static  int num1 =0;
    public static void triangle(int height, int width) { 

      /*  double num = new BigDecimal((double)width/2/height).setScale(1, RoundingMode.DOWN).doubleValue();*/
        double num = (double) width/2/height;
      //  System.out.print(num);
        triangle(height, width, 0,0.0, num);
    }

    private static void triangle(int height, int width, int s, double amountfordivide, double num) {

        System.out.println(s+" "+ amountfordivide+ " " + num+" "+ (++num1));
        if (s++ <= height ) {
            triangle(height, width, s, amountfordivide+num, num);
          //  System.out.println();
        /*System.out.println(n +" "+ m);*/
            if (s-1 == 0) {
                for (double i = 0.0; i <= width; i = i + num) {
                    System.out.print(".");
                }
                System.out.println();
            } else  {
                for (double i = 0.0; i <= width; i = i+num) {
                    if (i == amountfordivide)  System.out.print( ".");
                    else if (i == (width - amountfordivide)) System.out.print(".");
                    else
                        System.out.print(" ");
                }
                System.out.println();
            }
        }
    }

    public static void main(String[] args) {
        triangle(10, 5);
    }

}

1 个答案:

答案 0 :(得分:3)

不要认为添加双打会达到一定的价值。因此,

 for (double i = 0.0; i <= width; i = i+num) {

必须写

 for (double i = 0.0; i <= width + num/2.0; i = i+num) {

但是你遇到了使用==

比较双打的问题
 if (i == amountfordivide)  System.out.print( ".");
 else if (i == (width - amountfordivide)) System.out.print(".");

您可以使用类似的“包围比较,

 if( amountfordivide - num/2.0 < i && i < amountfordivide + num/2.0 )

和其他条件相同。

但最好更改计算器,以便使用int循环计数器和“热”值(amountfordivide)进行循环。