线程" main"中的例外情况Star.main上的java.lang.NegativeArraySizeException(Star.java:14)

时间:2014-09-06 21:11:29

标签: java

我尝试打印钻石星,但出现以下错误。

(线程“main”java.lang.NegativeArraySizeException中的异常     在Star.main(Star.java:14)。

这是我的代码。

public class Diamond
{
public static void main( String[] args)
{
    int width = 26;
    int row   = 2;
    int mult  = 4;
    int space = ( width - 1 ) / 2;

    for ( int i = 0; i < width; i++ )
    {
        String sp = new String( new char[space] );
        String rw = new String( new char[row] );

        System.out.print(   sp.replace( "\0", " " ) );
        System.out.println( rw.replace( "\0", "*" ) );

        row   += 2 * mult;
        space -= 1 * mult;

        if ( row == width )
            mult = -4;
    }
}} 

我尝试制作那些图像。

enter image description here

1 个答案:

答案 0 :(得分:0)

当达到模式的最宽点时,(row == widthmult设置为-4,以便行再次变小。但是当完成2星的最后一行时,(行= 2)2 +(2 *( - 4))= -6。因此,下次循环运行时,它会尝试创建一个包含-6个元素的char[]数组,这当然会抛出NegativeArraySizeException,因为创建包含-6个元素的列表非常困难。您应该将for循环中的退出条件更改为for ( int i = 0; i < width && row > 0; i++ )。这样,如果row小于或等于0,循环将不会执行。这也解决了如果没有执行,你的循环将永远保持不变的问题。