2016-03-29 10 views
1

は私が5×5の次の行列は2D配列の数値の対角を見つける?

{ , , T , , } 
{ , T , T , , } 
{ , , T , , } 
{ , T, , , } 
{T, , , , } 

を言うことができますしている場合は、私は、マトリックスのcharは別のものに対角であるかどうかを確認する必要があり、私は、以下の方法でそれらをチェックしています

public boolean isDiagonal(int row,int col){ 
    if (row == board.length-1 && board[row-1][col+1] == 'T') { 
     return true; 
    } else if (col == board.length -1 && board[row+1][col-1] == 'T') { 
     return true; 
    } else if (board[row][col] == 'T' && board[row+1][col+1] == 'T' ||  
     board[row][col] == 'T' && board[row-1][col-1] == 'T') { 
     return true; 
    } else if (board[row][col] == 'T' && board[row-1][col+1] == 'T' || 
     board[row][col] == 'T' && board[row+1][col-1] == 'T') {  
     return true; 
    } 

    return false; 
} 

char Tはボード上でランダムに割り当てられています。私はそれに斜めに別のTが存在する場合、char Tを置いている間にチェックする必要があります。

方法は、行と列と文字Tはボード上に存在するかどうかのチェックを受け取り、それが別のT.

に対して斜めである場合であれば、行= 0、COL = 4又は行= 1、COL = 5それは失敗し、配列を範囲外に投げるだろう。

行列の任意の数に対角を取得し、エッジのケースを避ける効率的な方法はありますか?

PS:私は要素を取得するメソッドを作成したJava

+3

あなたのユーザー名はかなり適切です。すべての質問に対して新しいアカウントを作成しますか? – Gendarme

+0

@Gendarmeいいえ、なぜでしょうか? :) – indexOutOfBounds

+0

あなたのコードを理解できません。なぜ「T」ですか?なぜ 'row'は' board.length-1'と同じになる必要がありますか? – Gendarme

答えて

0

内のコードにしようとしています、との座標が無効である場合には、デフォルト値を返します。あなたが検索するものだけにデフォルト値を使用してください。

public char getWithDefault(int row, int col, char default) { 
    if ((0 <= row) && (row < board.length) && 
     (0<=col) && (col < board[row].length)) { 
    return board[row][col]; 
    } 
    return default; 
} 

public boolean isDiagonal(int row,int col){ 
    // arbitrary default value, as long as it is != 'T' 
    if (getWithDefault(row,col,'1') != 'T') return false; 
    if (getWithDefault(row+1,col+1,'1') == 'T') return true; 
    if (getWithDefault(row+1,col-1,'1') == 'T') return true; 
    if (getWithDefault(row-1,col+1,'1') == 'T') return true; 
    if (getWithDefault(row-1,col-1,'1') == 'T') return true; 
    return false; 
} 

コードから、私はboardがcharの配列の配列であると推測しました。

+0

これはどのように動作するかを理解しようとしています。 getWithDefaultの唯一の機能は、座標が範囲内にあるかどうかをチェックすることです。 – indexOutOfBounds

+0

はい(多くの書き込みも保存されます)。ご覧のとおり、チェックする条件は4つあります。 –

+0

はい、私はそれを得ました。答えに感謝します。 – indexOutOfBounds

関連する問題