这是我刚编的扫雷小游戏 编译通过 运行时报错 特贴上代码 请各位前辈指点
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;class Saolei extends JFrame implements MouseListener{

int hang=6;
int lie=6;
int geshu=hang*lie;
int leishu=15;
JButton[] room=new JButton[geshu];
String[] disroom=new String[geshu];
String[] real=new String[geshu];

Saolei(){
super("扫雷");
setSize(600,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container pane=getContentPane();
GridLayout layout=new GridLayout(hang,lie);
//初始化按钮
/*for (int i=0;i<geshu;i++){
//disroom[i]=" ";
room[i]=new JButton(real[i]);
pane.add(room[i]);

room[i].addMouseListener(this);
}
pane.setLayout(layout);
setContentPane(pane);
setVisible(true);*/
//产生随机数
int i=0; 
while(i<leishu){
int rannum=(int)(Math.random()*geshu);
if (real[rannum]=="*")
continue;
else{ 
real[rannum]="*";//System.out.println(i+real[rannum]+rannum);
i++;
}
}
//无雷区数
for(int j=0;j<geshu;j++){
int k=0;
if(j==0){
//int k=0;
if(real[j]!="*"){
//int k=0;
if(real[1]=="*")
k++;
if(real[hang]=="*")
k++;
if(real[hang+1]=="*")
k++;
//real[0]=""+k;
//System.out.println(real[0]);
}
}
else if(j>0&&j<hang-1){
//int k=0;
if(real[j-1]=="*")
k++;
if(real[j+1]=="*")
k++;
if(real[j+hang-1]=="*")
k++;
if(real[j+hang]=="*")
k++;
if(real[j+hang+1]=="*")
k++;
//real[j]=""+k;
}
else if(j==hang-1){
//int k=0;
if(real[j-1]=="*")
k++;
if(real[j+hang-1]=="*")
k++;
if(real[j+hang]=="*")
k++;
}
else if(j%hang==0&&j>0&&j<geshu-hang){
if(real[j-hang]=="*")
k++;
if(real[j-hang+1]=="*")
k++;
if(real[j+1]=="*")
k++;
if(real[j+hang]=="*")
k++;
if(real[j+hang+1]=="*")
k++;
}
else if(j%hang==hang-1&&j>hang-1&&hang<geshu-1){
if(real[j-1]=="*")
k++;
else if(real[j-hang-1]=="*")
k++;
else if(real[j-hang]=="*")
k++;
else if(real[j+hang-1]=="*")
k++;
else if(real[j+hang]=="*")
k++;
}
else if(j==geshu-hang){
if(real[j+1]=="*")
k++;
else if(real[j-hang]=="*")
k++;
else if(real[j-hang+1]=="*")
k++;
}
else if(j==geshu-1){
if(real[j-1]=="*")
k++;
else if(real[j-hang]=="*")
k++;
else if(real[j-hang-1]=="*")
k++;
}
else if(j>geshu-hang&&j<geshu-1){
if(real[j-1]=="*")
k++;
else if(real[j-hang-1]=="*")
k++;
else if(real[j-hang+1]=="*")
k++;
else if(real[j-hang]=="*")
k++;
else if(real[j+1]=="*")
k++;
}
else {
if(real[j-1]=="*")
k++;
else if(real[j-hang-1]=="*")
k++;
else if(real[j-hang]=="*")
k++;
else if(real[j-hang+1]=="*")
k++;
else if(real[j+1]=="*")
k++;
else if(real[j+hang-1]=="*")
k++;
else if(real[j+hang]=="*")
k++;
else if(real[j+hang+1]=="*")
k++;
}
real[j]=""+k;
System.out.println(real[j]+" "+j);

}
for (int m=0;m<geshu;m++){
//disroom[i]=" ";
room[m]=new JButton(real[m]);
pane.add(room[m]);

room[m].addMouseListener(this);
}
pane.setLayout(layout);
setContentPane(pane);
setVisible(true);
//
}
public static void main(String[] arguments){
Saolei sl=new Saolei();
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
//if(e.isMetaDown()){
//e.
//}


}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub

}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub

}

}
运行结果
1 0
2 1
1 2
1 3
1 4
0 5
1 6
1 7
1 8
1 9
1 10
1 11
2 12
1 13
1 14
1 15
1 16
1 17
3 18
1 19
1 20
1 21
1 22
1 23
3 24
1 25
1 26
1 27
0 28
0 29
1 30
0 31
0 32
0 33
0 34
报错:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 40
at Saolei.<init>(Saolei.java:102)
at Saolei.main(Saolei.java:170)

解决方案 »

  1.   

    运行时异常,地址越界,因为Java不做边界检查,自己看下代码的102与107行。
      

  2.   

    要经常看看异常信息,高手就在于能够看异常信息,找bug
      

  3.   

    楼主,你可以用debug跟踪进去看看,因为别人一时半会也不能了解你的思路,所以很难帮你看的!
      

  4.   

    ArrayIndexOutOfBoundsException 数组越界~~
    在102和170分别打断点调试,一步步看值的变化就知道了
      

  5.   

    代码是你自己写的还是抄书上的? 怎么你出了错还不知道错在哪里?
    ArrayIndexOutOfBoundsException 数组越界~~
    在102和170分别打断点调试,一步步看值的变化就知道了
      

  6.   

    debug看看吧,这种的应该是数组错误哈
      

  7.   

    else if(j%hang==hang-1&&j>hang-1&&hang<geshu-1){
    if(real[j-1]=="*")
    k++;
    else if(real[j-hang-1]=="*")
    k++;
    else if(real[j-hang]=="*")
    k++;
    else if(real[j+hang-1]=="*")
    k++;
    else if(real[j+hang]=="*")
    k++;
    }
    这里的判断应该有问题的!