2012-09-25 7 views
1

지금은 배열을 사용하여 GUI없이 Java에서 4 개의 게임을 연결해야하는 학교 과제가 있습니다. 지금까지 수평 4 개를 연속으로 감지 할 수 있었지만 연속 4 개를 얻을 수는 없습니다. 원래 배열은 6x7 이었지만 어레이 배열을 바꾸는 개념을 테스트하기 위해 5x5로 변경했습니다. 그냥 혼란을 줄이기 위해 코드의 일부만 수직 감지 기능에 포함 시켰습니다.연결 감지의 수직 감지에 어려움을 겪고 있습니다.

for (column = 0; column < board.length; column++) { 

      count_piece = 0; 
      max = 0; 
      for (row = 0; row < board.length; row++) { 
       if (max < count_piece) { 
        max = count_piece; 
       } 
       if (board[column][row] == 'X') { 
        count_piece++; 
       } else { 
        count_piece = 0; 
       } 

      } 

     } 
     System.out.println(max); 
     if (max == 4) { 
      System.out.println("\nYou Win!"); 
      break; 
     } 

당신은 자세한 정보가 필요하거나 아무것도 명확하지 않은 경우 알려 주시면 좀 더 많은 정보를 제공 드리겠습니다하시기 바랍니다.

편집 : 여기에는 거꾸로 된 루프가 있습니다.

for (row = 0; row < board.length; row++) { 
     count_piece = 0; 
     max = 0; 
     for (column = 0; column < board.length; column++) { 

      if (max < count_piece) { 
       max = count_piece; 
      } 
      if (board[column][row] == 'X') { 
       count_piece++; 
      } else { 
       count_piece = 0; 
      } 

     } 

    } 
+0

최대 내게 중복되는 것 같습니다. 당신은 count_piece를 증가시킬 수 있습니다. 그리고 4 (또는 원하는 행의 지정된 번호)에 도달하자마자 루프에서 빠져 나오십시오. –

+0

프로그램 할 때 "배열 dementions"을 경험했습니다. (너무 오래 전에). –

답변

2

루프를 바꾸면 내부 루프가 행 대신 열이됩니다.

또한 내부 루프는에있는 하나의 배열의 길이를 취합니다.

그래서 대신을

편집board[i].length

처럼 board.length 사용 무언가를 사용하여 내부 나는 당신의 논리를 생각하여 내부 루프가 잘못되었습니다 ...

시도해보십시오.

여기
if (board[row][column] == 'X') { 
    count_piece++; 
    if(count_piece == 4) { 
     System.out.println("you win"); 
     return; 
    } 
} else { 
    count_piece = 0; 
} 

(10)는 모든 크기의 배열

int count_piece = 0; 

     //Checking Vertical Win 
     for (int row = 0; row < board.length; row++) { 
      count_piece = 0; 
      for (int column = 0; column < board[row].length; column++) { 

       if (board[row][column] == 'X') { 
        count_piece++; 
        if (count_piece == 4) { 
         System.out.println("you win"); 
         return; 
        } 

       } else { 
        count_piece = 0; 
       } 


      } 
     } 

     //Checking Horizontal Win 
     for (int column = 0; column < board.length; column++) { 
      count_piece = 0; 
      for (int row = 0; row < board[column].length; row++) { 

       if (board[row][column] == 'X') { 
        count_piece++; 
        if (count_piece == 4) { 
         System.out.println("you win"); 
         return; 
        } 

       } else { 
        count_piece = 0; 
       } 


      } 
     } 
+0

이 솔루션은 6x7 어레이에서 작동합니까? 또는 내가 만든 임시 5x5에서만 작동합니까? – DrinkJavaCodeJava

+0

왜 배열의 종류가 중요할까요? 특정 루프에서 한도만큼 제한적입니다. – gtgaxiola

+0

시도해 보니 작동하지 않았습니다. 변경 사항을 포함하는 수정 사항을 게시합니다. – DrinkJavaCodeJava

0

내가 count_piece를 증가하기 전에 최대 할당되어 볼 수있는 주요 문제에 모두 체크 수평 및 수직이 (당신이 연속으로 5를 얻을 수있을 것입니다 의미)이다. 또한 다른 사람들은 길이가 문제가 될 수 있다고 말했기 때문에 (자바에 익숙하지 않으므로 길이가 5 또는 25 일 때 모든 인덱스 또는 첫 번째 열 인덱스를 사용하는지에 따라 달라질 수 있습니다 .6x7로 돌아갈 때 관계 없음 또한 코드에서 현재 수행하고있는 작업은 각 열을 거쳐 행에 4 행이 있는지 확인하는 것입니다. 원하는 것은 두 축에서 4 행을 확인하는 것입니다 (내 솔루션은 (가 대각선 필요하지 않은 경우)) 행 변수 계산 및 열 변수 계산 가 count_piece_Col = 0 첨가하는 단계;. 최대 = 0; 루프 행 마찬가지로을 증가하기위한 제 상술 카운트

* 지연 방법

for(column=0;column<board.length;column++) 
      { 
       count_piece=0; max_r=0; 
       for(row=0;row<board.length;row++) 
       { 

       if(max_r<count_piece) 
        { 
         max_r=count_piece; 
        } 
        if(board[column][row]=='X') 
        { 
         count_piece++; 
        } 
        else 
        { 
         count_piece=0; 
        } 

      } 

     } 
    for(row=0;row<board.length;row++) 
      { 
       count_piece=0; max_c=0; 
       for(column=0;column<board.length;column++) 
       { 

       if(max_c<count_piece) 
        { 
         max_c=count_piece; 
        } 
        if(board[column][row]=='X') 
        { 
         count_piece++; 
        } 
        else 
        { 
         count_piece=0; 
        } 

      } 

     } 
+0

하지만 수직으로 할 때 전혀 계산되지 않습니다. – DrinkJavaCodeJava

관련 문제