我想知道下面这段程序是为什么mycanvas=newMycanvas[21];for(inti=1;i<=20;i++){mycanvas[i]=newMycanvas(i,i);我明明只需要创建20个mycanvas数组,但是Mycanvas[21]有21个,我还试了...
我想知道下面这段程序是为什么
mycanvas=new Mycanvas[21];
for(int i=1;i<=20;i++)
{ mycanvas[i]=new Mycanvas(i,i);
我明明只需要创建20个mycanvas数组,但是Mycanvas[21]有21个,我还试了一下,把21改成20,那么applet就显示小程序没启动了。如果把21改成20,那么那个i<=20也要改成19,反正就是比上面的数组少一个数,这是为什么,请大神介绍一下。另外,源程序如下
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
class Mycanvas extends Canvas
{ int x,y;
Mycanvas(int a,int b)
{ x=a;
y=b;
setSize(100,160);
}
public void paint(Graphics g)
{ g.setColor(Color.red);
g.fillOval(50,50,4*x,4*y);//画实心椭圆
g.drawString("我是第"+x,10,150);
}
}
public class Example extends Applet implements ActionListener
{ CardLayout mycard;
Button button1,button2,button3;
Mycanvas mycanvas[];
Panel p;
public void init()
{ setLayout(new BorderLayout()); //小容器的布局是边界布局.
mycard=new CardLayout();
p=new Panel();
p.setLayout(mycard); //p的布局设置为mycard 卡片式布局 .
button1=new Button("first");
button2=new Button("next");
button3=new Button("last one");
mycanvas=new Mycanvas[21];
for(int i=1;i<=20;i++)
{ mycanvas[i]=new Mycanvas(i,i);
p.add("i am"+i,mycanvas[i]);
}
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
Panel p2=new Panel();
p2.add(button1);
p2.add(button2);
p2.add(button3);
add(p,BorderLayout.CENTER);
add(p2,BorderLayout.SOUTH); }
public void actionPerformed(ActionEvent e)
{ if(e.getSource()==button1)
{ mycard.first(p); }
else if(e.getSource()==button2)
{ mycard.next(p); }
else if(e.getSource()==button3)
{ mycard.last(p); }
}
}
注 普通的java数组创建20个然后只能用0到19而不能用20访问我是知道的。
不过这道题是相当于创建了21个数组,因为不是mycanvas=new Mycanvas[21]吗,然后它循环时(i=1;i<=20;i++)这不就是说它只用了canvas[0]到canvas[19]这20个数组,那么最后一个数组canvas[20]不就没用到了吗,所以它按理来说应该是可以删掉改成mycanvas=new Mycanvas[20]的,可是这样就出现applet小程序未启动的问题了。所以我想知道的是为什么最后一个没有用到数组删掉就出现问题了
展开