import java.awt.*;
class GridLayoutTest {
Button bt[]=new Button[9];
Frame f=new Frame("GridLayout Test");
public static void main(String arg[]){
GridLayoutTest gtobj=new GridLayoutTest();
 gtobj.face();
}
void face(){
f.setLayout(new GridLayout(3,3));
int i;
for(i=0;i<9;i++);{
bt[i]=new Button("*"+i);
f.add(bt[i]);
}

    f.setSize(400,300);
    f.setVisible(true);
}    }

解决方案 »

  1.   


    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
    at GridLayoutTest.face(GridLayoutTest.java:13)
    at GridLayoutTest.main(GridLayoutTest.java:7)
      

  2.   

    for(i=0;i<9;i++);{
    bt[i]=new Button("*"+i);
    f.add(bt[i]);
    }去掉标红的这个';'号
      

  3.   

    谢谢了,我太菜了,这个看了半天都没发现,但是为什么不去“;Button[9]改成10,也可以运行,但是只出现一个按钮9,这里的for相当与什么作用呢,
      

  4.   

    还有要是我只想让按钮上有数字不要“*”为什么不可以写成bt[i]=new Button(i);
      

  5.   

    你原代码中的的for(i=0;i<9;i++);相当于for(i=0;i<9;i++){};,是个空循环,除了把i的值变为9外没有任何作用,然后才执行到你后面大括号中的new Button,Button bt[]=new Button[9],所以就是bt[9]=new Button("*" + 9);数组下标越界了!
    你如果把Button[9]改成10,就不会越界,但是代码只运行了一次,所以只有一个按钮。
    你5楼的问题应该是参数类型不对,Button没有整型参数的构造器,需要传入String类型的,所以,你把i换成""+i或者String.valueOf(i)都可以。