Java 打印三角形时出现IllegaArgumentException
我想打印出:Java 打印三角形时出现IllegaArgumentException,java,Java,我想打印出: ____* ___*_* __*___* _*_____* ********* (下划线“u”由空格“”代替) 下面是代码: public static void main(String[] args) { triangle(5); } public static void triangle(int height){ String space = " "; String asterisk = "*"; if(hei
____*
___*_*
__*___*
_*_____*
*********
(下划线“u”由空格“”代替)
下面是代码:
public static void main(String[] args) {
triangle(5);
}
public static void triangle(int height){
String space = " ";
String asterisk = "*";
if(height == 1){
System.out.println(asterisk);
}else{
//print out the "height - 1" line of triangle
for (int i = 1; i <= height - 1; i++) {
System.out.println(space.repeat(height - i) + asterisk + space.repeat(2 * i - 3) + asterisk);
}
System.out.println(asterisk.repeat(2 * height - 1));
}
那么问题出在哪里呢?问题出在for循环内部的
triangle()
方法中。让我们分析错误代码:空格。重复(2*i-3)
。for循环第一次运行时,i
=1
2次i=2。2减3=-1。结果是一个负数。这就是为什么计数为负-1错误您有两个问题。。。。一个,@ublec已经提到了。第一个循环失败,因为你的数学错误。另一个是你试图一次解决所有问题,而不是把这个问题分解成更小的问题(问题分解)。当您这样做时,您会找到每个部分的解决方案,然后通过对所有部分求和来综合整个解决方案 让我们分解这个问题。首先是三角形前半部分的间距问题:
1 *
2 *
3 *
4*
星号前面的空白是1减去高度。因此,对于5的高度,顶层有4个空格,然后是一个星号,然后是3加星号,依此类推。您应该在它的onSystem.out.print()语句中处理该部分(而不是println
)。现在你有了它,你需要“画”三角形的后半部分
顶层可以简单地打印换行符。但是,对于后续标高,间距为1、3、5、7等
1 *
2 *1*
3 *-3-*
4 *--5--*
5*---7---*
你现在看到模式了吗?你计算星号之间的间距的公式显然是错误的String#repeat(int)
无法填充星号之间的区域,除非您找到i
与星号之间的空格数之间的正确相关性。您是否看到,在我放置在星号之间的数字的左侧和右侧有等量的破折号,以指示每层的总空间量?这是你应该如何进行的暗示
最后,您上次打印的声明是正确的
我用我建议的修改运行了您的代码,这是我对高度为5的三角形的输出:
*
* *
* *
* *
*********
当i
为1时,2*i-3
为负数。似乎您希望顶行有一个特例,因为它只有一个星号。目前,试图在两个星号之间使用-1空格是行不通的。我发布了一个答案,并提示如何推导正确的填充公式。因为这显然是一个家庭作业,如果你不根据我的提示自己去想办法的话,我不会帮你任何忙。如果你想不出答案,我可以稍后再发答案。另一方面,这是问题分解的重要一课。您试图一次解决所有问题,而不是在练习中思考不同的子问题,并尝试独立解决每个问题。@CarterZhang有帮助吗?
*
* *
* *
* *
*********