我尝试打印钻石星,但出现以下错误。
(线程“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;
}
}}
我尝试制作那些图像。
答案 0 :(得分:0)
当达到模式的最宽点时,(row == width
)mult
设置为-4,以便行再次变小。但是当完成2星的最后一行时,(行= 2)2 +(2 *( - 4))= -6。因此,下次循环运行时,它会尝试创建一个包含-6个元素的char[]
数组,这当然会抛出NegativeArraySizeException
,因为创建包含-6个元素的列表非常困难。您应该将for循环中的退出条件更改为for ( int i = 0; i < width && row > 0; i++ )
。这样,如果row
小于或等于0,循环将不会执行。这也解决了如果没有执行,你的循环将永远保持不变的问题。