2011-05-02 3 views
1

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(); 
    } 
} 
+0

eh .. c'est énorme .. pouvez-vous nous montrer la ligne exacte où les points de stacktrace? (ne nous faites pas compter) – Bozho

+0

@Bozho: Ligne 38, selon la description. Heureusement que cela semble être la ligne en question :) –

+0

ouais, mais je devais compter :) qui a ralenti ma réponse :) – Bozho

Répondre

12

Vous traitez la baie comme si elle était basée sur 1 ... les baies sont toujours basées sur 0 en Java. Donc ceci:

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

devrait être le suivant:

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

Vous aurez besoin de régler le reste de votre programme pour tenir compte de cela aussi. (Vous pourrait créer simplement créer le tableau un plus grand et ignorer l'élément 0, mais ce serait assez non-idiomatique.)

+2

Jon Skeet, gourou de SO, noble assistant des débutants ...;) – Cephron

+0

merci, je prends quatre langues différentes simultanément à mon collège. Les règles deviennent donc parfois un peu floues. –

Questions connexes