Reputation: 377
My IDE (TextPad) is giving me this error: java.lang.ArrayIndexOutOfBoundsException: 9
I looked at the array on line 38 and can't see what the problem is. 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();
}
}
Upvotes: 1
Views: 245
Reputation: 1500873
You're treating the array as if it were 1-based... arrays are always 0-based in Java. 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. (You could just create the array one bigger and ignore element 0, but that would be pretty non-idiomatic.)
Upvotes: 12