2013-07-26 3 views
-3
@Override 
public void actionPerformed(ActionEvent event){ 
    JButton current; 
    int turn=0; 
    for(int i=0; i< buttons.length;i++){ 
     for(int j =0; j<buttons.length; j++){ 
      while(event.getSource().equals(buttons[i][j])){ 
      if(turn==0){ 
       current=buttons[i][j]; 
       current.setText("X");//current sets the text i,j to x. 
       turn++; 
       } 
      else if(turn==1){ 
      current=buttons[i][j]; 
      current.setText("O"); 
      turn--; 

       } 
      } 
     }//end j 
    }//end i 
}//end actionperformed. 

okay, 나는 x와 o 사이에서 회전을 시도하고있다. 그래서이 방법은 actionperformed 것이지만, 나는 프로그램을 실행할 때 항상 그 지점에서 멈춘다. 나는 버튼을 클릭한다. 나는 while 루프를 사용하여 중첩 된 for 루프 (완전히 실행되지 않은 방법)를 망쳤다 고 생각합니다.누군가 다음 코드의 문제점을 확인할 수 있습니까? 나는 Tic Tac Toe를 만들려고 노력하고있다.

+0

당신이 당신의 코드를 디버깅하는 시도 해 봤나 : 차례는 두 개의 값을 가질 수 주어진

public void actionPerformed(ActionEvent event) { JButton clicked = (JButton) event.getSource(); if (turn == 0) { clicked.setText("X"); turn++; } else { clicked.setText("O"); turn--; } } 

주, 당신은 그것을 부울을해야합니까? –

+3

while (event.getSource(). equals (buttons [i] [j]))'syso' 문을 추가하여 루프가 있는지 확인합니다. –

+0

더 좋은 방법이 있나요? – Bango

답변

4

세 개의 루프가 있지만 필요하지 않습니다. 당신이 원한다면, 정확하게 이해한다면 turn의 값에 따라 클릭 한 버튼의 텍스트를 X 또는 O로 설정하는 것입니다. 그리고 클릭 된 버튼은 event.getSource()에 의해 반환됩니다. 그래서 방법은 간단해야한다 :

public void actionPerformed(ActionEvent event) { 
    JButton clicked = (JButton) event.getSource(); 
    clicked.setText(turn ? "X" : "O"); 
    turn = !turn; 
} 
+0

이 대답에 동의하면 루프가 필요하지 않습니다. – glautrou

0

가로 및 세로로 buttons.length을 사용하고 있지만 단추 수는 열/행 수와 다릅니다. 사실이 숫자는 행 수에 행 수를 곱한 것입니다. 이 번호에 sqrt를 사용하십시오.

또한 정수 변수 turn 대신 부울을 사용해야하며 각 차례 후에 다음을 작성하십시오. turn = !turn.

편집 : 또한 나는 왜 while을 사용하고 있는지 이해할 수 없습니다.