这是我刚编的扫雷小游戏 编译通过 运行时报错 特贴上代码 请各位前辈指点
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)
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)
在102和170分别打断点调试,一步步看值的变化就知道了
ArrayIndexOutOfBoundsException 数组越界~~
在102和170分别打断点调试,一步步看值的变化就知道了
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++;
}
这里的判断应该有问题的!