Mon IDE (TextPad) me donne cette erreur: java.lang.ArrayIndexOutOfBoundsException: 9Array Index est "Out of Bounds". Mais je ne vois pas ce qui ne va pas
Je regardais le tableau sur la ligne 38 et ne peut pas voir ce que le problème est . changer le tableau serait totalement bousiller le programme.
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();
}
}
eh .. c'est énorme .. pouvez-vous nous montrer la ligne exacte où les points de stacktrace? (ne nous faites pas compter) – Bozho
@Bozho: Ligne 38, selon la description. Heureusement que cela semble être la ligne en question :) –
ouais, mais je devais compter :) qui a ralenti ma réponse :) – Bozho