2009-07-27 5 views
1

이것은 인트로 Java 클래스에 대해 연구하고있는 학교 문제입니다. 할당은 무작위로 생성 된 2 진수의 8 x 8 행렬을 생성하는 프로그램을 작성하고, 프로그램 열이 모두 0이고 주요 및 부 대각선도 0으로 구성되어 있는지 프로그램 검사를 수행하는 것입니다. 주요 대각선은 왼쪽 위 모서리에서 오른쪽 아래 모서리까지 (이 경우 arrayName[0][0]에서 arrayName[8][8]까지) 형성된 대각선이며 작은 대각선은 행렬의 오른쪽 위 모서리에서 왼쪽 하단 모서리까지가는 대각선입니다.2D 배열의 대각선 및 대각선 대각선이 0으로 구성되어 있는지 찾기

중요한 부분과 작은 부분의 대각선을 검사하는 부분을 제외하고는 모든 것이 작동합니다. 왜 이것이 작동하지 않는지 알 수 없습니다. 제가 해왔 던 것은 대각선을 따라 0의 수를 세는 것입니다. 그리고 그 수가 8이면, 당신은 0으로 구성된 대각선을가집니다.

public static void majorDiagonal(int[][] board) { 
    byte count = 0; 

    for(int row = board.length - 1, offsetNumber = board.length - 1; row > 0; row--, offsetNumber--) 
     for(int column = board.length - 1; column > 0; column--) 
      if(board[row][offsetNumber] == 0) count++; 

    if(count == 8) System.out.println("All zeroes on the major diagonal"); 
} 

public static void minorDiagonal(int[][] board) { 
    byte count = 0; 

    for(int row = board.length - 1, offsetNumber = 0; row > 0; row--, offsetNumber++) 
     for(int column = board.length - 1; column > 0; column--) 
      if(board[row][offsetNumber] == 0) count++; 

    if(count == 8) System.out.println("All zeroes on the minor diagonal"); 
} 

내가 for 루프에서 계산에 의해 주요 대각선 찾기 위해 시도 할 때 I가 발생 흥미로운 오류, 즉 :

for(int row = 0; row< board.length; row++) 
    for(int column = 0; column < board.length; column++) 
     if(board[row][row] == 0) count++; 
여기가 크고 작은 배열이 두 가지 방법은

코드는 작동하지 않지만 대각선이 모두 1과 단일 0이면 변수 count가 8이 아니더라도 "주 대각선에 모두 제로"가 인쇄됩니다.

희망 사항입니다. 도움을 주셔서 감사합니다.

답변

0

대각선 요소는 board[0][0], board[1][1], board[2][2]이므로 두 개의 루프가 필요하지 않습니다. 그냥 board[i][i]입니다.

public static void majorDiagonal(int[][] board) 
{ 
    byte count = 0; 
    for (int i = 0; i < board.length; ++i) 
    { 
     if (board[i][i] == 0) count++; 
    } 
    if(count == board.length) System.out.println("All zeroes on the major diagonal"); 
} 

그리고 미성년자는 유사합니다. board[0][7], board[1][6], board[2][5], board[i][board.length-1-i]으로 간단히 지정할 수 있습니다.

public static void minorDiagonal(int[][] board) 
{ 
    byte count = 0; 
    for (int i = 0; i < board.length; ++i) 
    { 
     if (board[i][board.length-1-i] == 0) count++; 
    } 
    if(count == board.length) System.out.println("All zeroes on the minor diagonal"); 
} 
+0

모두 좋다. 최종 검사에서 리터럴 '8'대신에 '길이'를 사용할 가치가 있지만 (루프에서 사용하기 때문에) 약간 더 일반화해야한다. –

+0

좋은 점은, 원래 질문에서 인쇄 라인을 복사하여 붙였을뿐입니다. –

+0

세부 사항을 가져 주셔서 감사합니다. 너 한테 빚 졌어. – maxvcore

7

너무 복잡합니다. 점검해야 할 요소의 위치를 ​​잠시 고려하십시오. 주요 대각선의 경우 인덱스는 (0,0), (1,1), (2,2), ..., (7,7)입니다. 이제 일시 중지하고 변경 패턴을 관찰 한 다음 실제로 그러한 시퀀스를 생성해야하는 루프가 몇 개인 지 생각해보십시오. 사소한 대각선은 외형 적으로 만 다릅니다 : (0,7), (1,6), (2,5), ..., (7,0) - 다음과 같이 재 작성 될 수 있습니다 : (7-7, 7), (7-6, 6), (7-5, 5), ... (7-0, 0)이다. 다시 말하면 실제로 얼마나 많은 루프가 필요한지 생각해보십시오.

+0

Spot on : 두 개의 별도 기능을 사용해야하는 경우가 아니라면이 모든 것을 하나의 루프로 결합해야합니다. – DisgruntledGoat

+0

고맙다. 나는 방금 로봇 식으로 생각하고있다. – maxvcore

관련 문제