java吧 关注:1,249,108贴子:12,729,997

这个是什么错误

只看楼主收藏回复


程序都没有错误,最后在运行的出现了这个错误,


1楼2013-11-23 12:27回复
    不懂帮@妹子大神 @


    来自Android客户端2楼2013-11-23 12:36
    收起回复
      看不清,似乎是数组下标越界了。


      IP属地:四川来自Android客户端3楼2013-11-23 12:36
      收起回复
        下标越界


        来自iPhone客户端4楼2013-11-23 12:48
        回复
          把代码贴出来吧


          5楼2013-11-23 12:50
          回复
            package test;
            import java.awt.BorderLayout;
            import java.awt.Color;
            import java.awt.FlowLayout;
            import java.awt.GridLayout;
            import java.awt.Label;
            import java.awt.event.ActionEvent;
            import java.awt.event.ActionListener;
            import java.awt.event.MouseAdapter;
            import java.awt.event.MouseEvent;
            import javax.swing.JButton;
            import javax.swing.JFrame;
            import javax.swing.JPanel;
            public class Mine extends MouseAdapter {
            private JFrame mainFrame;
            private int[][] data;
            private JButton[][] buttons;
            private JButton startJB;
            private Label l;
            private int row;
            private int col;
            private int mineNumber;
            private int mineCount;
            private boolean isOver;
            public Mine(){
            row=15;
            col=15;
            mainFrame = new JFrame("扫雷");
            data = new int[row][col];
            buttons = new JButton[row][col];
            startJB = new JButton("start");
            l = new Label("welcome to mine ");
            mineNumber = row * col/7;
            }
            public void init(){
            JPanel north = new JPanel();
            JPanel center = new JPanel();
            JPanel south = new JPanel();
            north.setLayout(new FlowLayout());
            center.setLayout(new FlowLayout());
            south.setLayout(new GridLayout(row,col,4,4));
            mainFrame.setLayout(new BorderLayout());
            mainFrame.add(north,BorderLayout.NORTH);
            mainFrame.add(center,BorderLayout.CENTER);
            mainFrame.add(south,BorderLayout.SOUTH);
            north.add(l);
            startJB.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            for(int i = 0;i<row;i++){
            for(int j=0;j<col;j++){
            buttons[i][j].setText(" ");
            buttons[i][j].setBackground(Color.WHITE);
            data[i][j]=0;
            isOver = false;
            }
            }
            hashMine();
            mineCount = 0;
            l.setText("let's go");
            }
            });
            center.add(startJB);
            for(int i = 0;i<row;i++){
            for(int j=0;j<col;j++){
            buttons[i][j]=new JButton(" ");
            buttons[i][j].setName((i+":"+j));
            //按钮的名字
            buttons[i][j].setBackground(Color.WHITE);
            buttons[i][j].addMouseListener(this);
            south.add(buttons[i][j]);
            }
            }
            hashMine();
            }
            public void start(){
            mainFrame.setSize(800,600);
            mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            mainFrame.setVisible(true);
            }
            public void hashMine(){
            //得到随机数,确定类的位置
            for(int i=1;i<mineNumber;i++){
            data[(int)(Math.random()*row)][(int)(Math.random()*col)]=-1;
            }
            for(int i=0;i<row;i++){
            for(int j=0;i<col;j++){
            if(data[i][j] == -1)
            continue;
            int sum=0;
            for (int m=-1;m<=1;m++){
            for(int n = -1;n<=1;n++){
            if(i +m>=0&&j+n>=0&&i+m<row&&j+n<col){
            if(data[i+m][j+n]==-1)
            sum++;
            }
            }
            }
            data[i][j]=sum;
            }
            }
            }


            6楼2013-11-23 12:51
            回复
              private void gameOver(boolean over){
              if(over==true){
              for(int i=0;i<row;i++){
              for(int j=0;j<col;j++){
              if(data[i][j]==-1){
              buttons[i][j].setText("M");
              buttons[i][j].setBackground(Color.RED);
              }
              }
              }
              l.setText("-_-");
              isOver = true;
              return;
              }
              int sumPress = 0;
              for(int i=0;i<row;i++){
              for(int j=0;j<col;j++){
              if(buttons[i][j].getText().equals(" ")){
              sumPress++;
              }
              }
              }
              if(sumPress == row*col){
              int sum=0;
              for(int i=0;i<row;i++){
              for(int j=0;j<col;j++){
              if(data[i][j]==-1&&buttons[i][j].getSize().equals("M")){
              sum++;
              }
              }
              }
              if(sum>=mineNumber){
              System.out.println(mineNumber);
              l.setText("^_^");
              //游戏胜利
              }
              }
              }
              public void mousePressed(MouseEvent e){
              try{
              if(isOver)
              return;
              if(e.getButton()==MouseEvent.BUTTON3){
              JButton jb = (JButton) e.getSource();
              if(jb.getText().equals("M")){
              jb.setText("-_-");
              mineCount--;
              jb.setBackground(Color.WHITE);
              }else{
              if(mineCount<mineNumber){
              jb.setText("M");
              jb.setBackground(Color.BLUE);
              mineCount++;
              }else{
              l.setText("the mine flag is over!");
              }
              }
              }else{
              JButton jb= (JButton) e.getSource();
              mousePress(jb);//
              }
              }
              catch(Exception ex){
              ex.printStackTrace();
              }
              gameOver(true);
              }
              private void mousePress (JButton jb){
              String str[] = jb.getName().split(":");
              int i =Integer.parseInt(str[0]);
              int j= Integer.parseInt(str[1]);
              if(data[i][j]==-1){
              gameOver(true);
              return;
              }else{
              jb.setText(data[i][j]+"");
              jb.setBackground(Color.YELLOW);
              if(data[i][j]==0){
              for(int n =-1;n<=1;n++){
              for(int m=-1;m<=1;m++){
              if(i+m>=0&&j+n>=0&&i+m<row&&j+n<col){
              mousePress(buttons[i+m][j+n]);
              }
              }
              }
              }
              }
              }
              public static void main(String[] args){
              Mine mine = new Mine();
              mine.init();
              mine.start();
              }
              }


              7楼2013-11-23 12:51
              回复
                图看不清楚啊……只截取错误那一段的图吧


                IP属地:湖北来自Android客户端8楼2013-11-23 12:54
                回复
                  抛个异常试试。


                  9楼2013-11-23 13:01
                  回复
                    应该是数组下标越界


                    IP属地:北京10楼2013-11-23 13:05
                    回复
                      下标越界!


                      IP属地:浙江11楼2013-11-23 13:06
                      回复
                        数组越界,比如:int [] i 里面有5个, 你取i [6] 就报这个错


                        IP属地:上海12楼2013-11-23 13:27
                        回复
                          下标越界


                          IP属地:上海来自iPhone客户端13楼2013-11-23 14:08
                          回复
                            你访问数组时超出了数组大小


                            14楼2013-11-23 14:31
                            回复
                              五十六个闰土
                              五十六只猹
                              五十六个马栏坡姐偷西瓜
                              五十六种语言
                              汇成一句话
                              没有图你
                              说个JB
                              说个JB
                              哈利路亚
                              健儿奋起的步伐
                              哈利路亚
                              建设我们的国家
                              哈利路亚
                              中华雄姿英发
                              哈利路亚
                              五十六族兄弟姐妹
                              五十六种语言汇成一句话
                              叫你偷瓜,叫你偷瓜,叫你偷瓜


                              IP属地:北京15楼2013-11-23 16:35
                              回复