我需要写一个客户身高和宽度的等腰三角形。
三角形(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);
}
}
答案 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)进行循环。