简体   繁体   English

数组索引是“越界”。 但我看不出有什么问题

[英]Array Index is “Out of Bounds”. But I can't see what's wrong

My IDE (TextPad) is giving me this error: java.lang.ArrayIndexOutOfBoundsException: 9我的 IDE (TextPad) 给了我这个错误: java.lang.ArrayIndexOutOfBoundsException: 9

I looked at the array on line 38 and can't see what the problem is.我查看了第 38 行的数组,看不出问题出在哪里。 changing the array would totally screw up the program.改变阵列会完全搞砸程序。

   import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Random;


public class TicTacToeGame implements ActionListener {
    /*Define Buttons, Variables Etc*/
      int[][] winCombinations = new int[][] {
                    {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, //horizontal wins
                    {1, 4, 7}, {2, 5, 8}, {3, 6, 9}, //virticle wins
                    {1, 5, 9}, {3, 5, 7}
                };//diagonal wins

     JFrame window = new JFrame("Tic-Tac-Toe Game");
     JButton btn[] = new JButton[9];
     int count = 0;
     JLabel lblTitle = new JLabel("Tic Tac Toe Game");
     JLabel lblBlank = new JLabel(" ");
     String letter = "";
     boolean win = false;





    public TicTacToeGame(){
    /*Creates Window*/
    window.setSize(400,300);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setLayout(new GridLayout(3,3));


    /*Adds Buttons To The Window& adds ActionListener to them*/
    for(int i = 1; i<=9; i++){
            btn[i] = new JButton();
            window.add(btn[i]);
            btn[i].addActionListener(this);
        }


    /*Make The Window Visible*/
    window.setVisible(true);
    }

    public void actionPerformed(ActionEvent a) {


      /*Write the letter to the button and deactivate it*/
            for(int i = 1; i<= 9; i++){
                if(a.getSource() == btn[i]){
                    btn[i].setText("X");
                    btn[i].setEnabled(false);
                }
            }

            count++;
            AI();

        }


          public void AI(){
              count++;
              if(btn[1].getText().equals("O") && btn[2].getText().equals("O") && btn[3].getText().equals("")){
                  btn[3].setText("O");
                  btn[3].setEnabled(false);
              } else if(btn[4].getText().equals("O") && btn[5].getText().equals("O") && btn[6].getText().equals("")){
                  btn[6].setText("O");
                  btn[6].setEnabled(false);
              } else if(btn[7].getText().equals("O") && btn[8].getText().equals("O") && btn[9].getText().equals("")){
                  btn[9].setText("O");
                  btn[9].setEnabled(false);
              }

              else if(btn[2].getText().equals("O") && btn[3].getText().equals("O") && btn[1].getText().equals("")){
                  btn[1].setText("O");
                  btn[1].setEnabled(false);
              } else if(btn[5].getText().equals("O") && btn[6].getText().equals("O") && btn[4].getText().equals("")){
                  btn[4].setText("O");
                  btn[4].setEnabled(false);
              } else if(btn[8].getText().equals("O") && btn[9].getText().equals("O") && btn[7].getText().equals("")){
                  btn[7].setText("O");
                  btn[7].setEnabled(false);
              }

              else if(btn[1].getText().equals("O") && btn[3].getText().equals("O") && btn[2].getText().equals("")){
                  btn[2].setText("O");
                  btn[2].setEnabled(false);
              } else if(btn[4].getText().equals("O") && btn[6].getText().equals("O") && btn[5].getText().equals("")){
                  btn[5].setText("O");
                  btn[5].setEnabled(false);
              } else if(btn[7].getText().equals("O") && btn[9].getText().equals("O") && btn[8].getText().equals("")){
                  btn[8].setText("O");
                  btn[8].setEnabled(false);
              }

              else if(btn[1].getText().equals("O") && btn[4].getText().equals("O") && btn[7].getText().equals("")){
                  btn[7].setText("O");
                  btn[7].setEnabled(false);
              } else if(btn[2].getText().equals("O") && btn[5].getText().equals("O") && btn[8].getText().equals("")){
                  btn[4].setText("O");
                  btn[4].setEnabled(false);
              } else if(btn[3].getText().equals("O") && btn[6].getText().equals("O") && btn[9].getText().equals("")){
                  btn[9].setText("O");
                  btn[9].setEnabled(false);
              }

              else if(btn[4].getText().equals("O") && btn[7].getText().equals("O") && btn[1].getText().equals("")){
                  btn[1].setText("O");
                  btn[1].setEnabled(false);
              } else if(btn[5].getText().equals("O") && btn[8].getText().equals("O") && btn[2].getText().equals("")){
                  btn[2].setText("O");
                  btn[2].setEnabled(false);
              } else if(btn[6].getText().equals("O") && btn[9].getText().equals("O") && btn[3].getText().equals("")){
                  btn[3].setText("O");
                  btn[3].setEnabled(false);
              }

              else if(btn[1].getText().equals("O") && btn[7].getText().equals("O") && btn[4].getText().equals("")){
                  btn[4].setText("O");
                  btn[4].setEnabled(false);
              } else if(btn[2].getText().equals("O") && btn[8].getText().equals("O") && btn[5].getText().equals("")){
                  btn[5].setText("O");
                  btn[5].setEnabled(false);
              } else if(btn[3].getText().equals("O") && btn[9].getText().equals("O") && btn[6].getText().equals("")){
                  btn[6].setText("O");
                  btn[6].setEnabled(false);
              }

              else if(btn[1].getText().equals("O") && btn[5].getText().equals("O") && btn[9].getText().equals("")){
                  btn[9].setText("O");
                  btn[9].setEnabled(false);
              } else if(btn[5].getText().equals("O") && btn[9].getText().equals("O") && btn[1].getText().equals("")){
                  btn[1].setText("O");
                  btn[1].setEnabled(false);
              } else if(btn[1].getText().equals("O") && btn[9].getText().equals("O") && btn[5].getText().equals("")){
                  btn[5].setText("O");
                  btn[5].setEnabled(false);
              }

              else if(btn[3].getText().equals("O") && btn[5].getText().equals("O") && btn[7].getText().equals("")){
                  btn[7].setText("O");
                  btn[7].setEnabled(false);
              } else if(btn[7].getText().equals("O") && btn[5].getText().equals("O") && btn[3].getText().equals("")){
                  btn[3].setText("O");
                  btn[3].setEnabled(false);
              } else if(btn[7].getText().equals("O") && btn[3].getText().equals("O") && btn[5].getText().equals("")){
                  btn[5].setText("O");
                  btn[5].setEnabled(false);
              }

              else if(btn[1].getText().equals("X") && btn[2].getText().equals("X") && btn[3].getText().equals("")){
                  btn[3].setText("O");
                  btn[3].setEnabled(false);
              } else if(btn[4].getText().equals("X") && btn[5].getText().equals("X") && btn[6].getText().equals("")){
                  btn[6].setText("O");
                  btn[6].setEnabled(false);
              } else if(btn[7].getText().equals("X") && btn[8].getText().equals("X") && btn[9].getText().equals("")){
                  btn[9].setText("O");
                  btn[9].setEnabled(false);
              }

              else if(btn[2].getText().equals("X") && btn[3].getText().equals("X") && btn[1].getText().equals("")){
                  btn[1].setText("O");
                  btn[1].setEnabled(false);
              } else if(btn[5].getText().equals("X") && btn[6].getText().equals("X") && btn[4].getText().equals("")){
                  btn[4].setText("O");
                  btn[4].setEnabled(false);
              } else if(btn[8].getText().equals("X") && btn[9].getText().equals("X") && btn[7].getText().equals("")){
                  btn[7].setText("O");
                  btn[7].setEnabled(false);
              }

              else if(btn[1].getText().equals("X") && btn[3].getText().equals("X") && btn[2].getText().equals("")){
                  btn[2].setText("O");
                  btn[2].setEnabled(false);
              } else if(btn[4].getText().equals("X") && btn[6].getText().equals("X") && btn[5].getText().equals("")){
                  btn[5].setText("O");
                  btn[5].setEnabled(false);
              } else if(btn[7].getText().equals("X") && btn[9].getText().equals("X") && btn[8].getText().equals("")){
                  btn[8].setText("O");
                  btn[8].setEnabled(false);
              }

              else if(btn[1].getText().equals("X") && btn[4].getText().equals("X") && btn[7].getText().equals("")){
                  btn[7].setText("O");
                  btn[7].setEnabled(false);
              } else if(btn[2].getText().equals("X") && btn[5].getText().equals("X") && btn[8].getText().equals("")){
                  btn[8].setText("O");
                  btn[8].setEnabled(false);
              } else if(btn[3].getText().equals("X") && btn[6].getText().equals("X") && btn[9].getText().equals("")){
                  btn[9].setText("O");
                  btn[9].setEnabled(false);
              }

              else if(btn[4].getText().equals("X") && btn[7].getText().equals("X") && btn[1].getText().equals("")){
                  btn[1].setText("O");
                  btn[1].setEnabled(false);
              } else if(btn[5].getText().equals("X") && btn[8].getText().equals("X") && btn[2].getText().equals("")){
                  btn[2].setText("O");
                  btn[2].setEnabled(false);
              } else if(btn[6].getText().equals("X") && btn[9].getText().equals("X") && btn[3].getText().equals("")){
                  btn[3].setText("O");
                  btn[3].setEnabled(false);
              }

              else if(btn[1].getText().equals("X") && btn[7].getText().equals("X") && btn[4].getText().equals("")){
                  btn[4].setText("O");
                  btn[4].setEnabled(false);
              } else if(btn[2].getText().equals("X") && btn[8].getText().equals("X") && btn[5].getText().equals("")){
                  btn[5].setText("O");
                  btn[5].setEnabled(false);
              } else if(btn[3].getText().equals("X") && btn[9].getText().equals("X") && btn[6].getText().equals("")){
                  btn[6].setText("O");
                  btn[6].setEnabled(false);
              }

              else if(btn[1].getText().equals("X") && btn[5].getText().equals("X") && btn[9].getText().equals("")){
                  btn[9].setText("O");
                  btn[9].setEnabled(false);
              } else if(btn[5].getText().equals("X") && btn[9].getText().equals("X") && btn[1].getText().equals("")){
                  btn[1].setText("O");
                  btn[1].setEnabled(false);
              } else if(btn[1].getText().equals("X") && btn[9].getText().equals("X") && btn[5].getText().equals("")){
                  btn[5].setText("O");
                  btn[5].setEnabled(false);
              }

              else if(btn[3].getText().equals("X") && btn[5].getText().equals("X") && btn[7].getText().equals("")){
                  btn[7].setText("O");
                  btn[7].setEnabled(false);
              } else if(btn[7].getText().equals("X") && btn[5].getText().equals("X") && btn[3].getText().equals("")){
                  btn[3].setText("O");
                  btn[3].setEnabled(false);
              } else if(btn[7].getText().equals("X") && btn[3].getText().equals("X") && btn[5].getText().equals("")){
                  btn[5].setText("O");
                  btn[5].setEnabled(false);
              }

              else if(btn[1].getText().equals("X") && btn[5].getText().equals("O") && btn[9].getText().equals("X")) {
                  btn[6].setText("O");
                  btn[6].setEnabled(false);
              }

              else if(btn[3].getText().equals("X") && btn[5].getText().equals("O") && btn[7].getText().equals("X")) {
                  btn[4].setText("O");
                  btn[4].setEnabled(false);
              }

              else if(btn[5].getText().equals("")){
                  btn[5].setText("O");
                  btn[5].setEnabled(false);
              }

              else if(btn[1].getText().equals("")){
                  btn[1].setText("O");
                  btn[1].setEnabled(false);
              }
              else {
                  if(count >= 9)
                      checkWin();
                  else
                      RandomMove();
              }

              checkWin();

          }

          public void RandomMove(){
              Random x = new Random();
              int y = 1 + x.nextInt(9);
              if(btn[y].getText().equals("O") || btn[y].getText().equals("X") ){
                  RandomMove();
              } else {
                  btn[y].setText("O");
                  btn[y].setEnabled(false);
              }
          }

 public void checkWin(){

        /*Determine who won*/
        for(int i=0; i<=7; i++){
            if( btn[winCombinations[i][0]].getText().equals(btn[winCombinations[i][1]].getText()) &&
                btn[winCombinations[i][1]].getText().equals(btn[winCombinations[i][2]].getText()) &&
                !btn[winCombinations[i][0]].getText().equals("")) {
                win = true;
            }
        }

        if(count % 2 == 0)
            letter = "<font color='blue'>O";
        else
            letter = "<font color='red'>X";



        /*Shows Win & Tie Status Message*/
        if(win == true){
            JOptionPane.showMessageDialog(null, letter + " WINS!</font></html>");
        } else if(count == 9 && win == false){
            JOptionPane.showMessageDialog(null, "Tie Game!");
        }

}
    public static void main(String[] args){
        new TicTacToeGame();
    }
}

You're treating the array as if it were 1-based... arrays are always 0-based in Java.您将数组视为基于 1... arrays 在 Java 中始终基于 0。 So this:所以这:

for (int i = 1; i <= 9; i++) {

should be this:应该是这样的:

for (int i = 0; i < 9; i++) {

You'll need to adjust the rest of your program to account for this too.您也需要调整程序的 rest 以解决此问题。 (You could just create the array one bigger and ignore element 0, but that would be pretty non-idiomatic.) (您可以只创建一个更大的数组并忽略元素 0,但这很不习惯。)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM