2016-03-29 23 views
1

Ben 5x5 aşağıdaki matris2D dizisinde bir sayının çaprazını bulmak mı?

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

diyelim varsa ve ben bir matris içinde Char başka birine diyagonal olup olmadığını kontrol etmek zorunda, ben, şu şekilde onları kontrol ediyorum

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, tahtaya rasgele atanır. Köşeye T yerine başka bir T varsa, T'yi yerleştirirken kontrol etmem gerekir.

yöntem satır ve sütun ve kömür T kartındaki var olup olmadığını kontrol eder alır ve başka T.

diyagonal ise ise satır = 0 ve sütun = 4 ya da sıralı = 1 ve sütun = 5 ve benzeri ... Başarısız olacak ve dizi sınırları dışına çıkaracak.

Matristeki herhangi bir sayıya köşegen almanın ve kenar durumlarından kaçınmanın verimli yolu nedir?

PS: Ben elemanı almak için bir yöntem yaratacak Java

+3

Kullanıcı adınız çok uygun. Her soru için yeni bir hesap oluşturuyor musunuz? – Gendarme

+0

@Gendarme Hayır neden olmasın? :) – indexOutOfBounds

+0

Kodunuzu anlamıyorum. Neden "T"? Neden 'row' board.length-1' için eşittir? – Gendarme

cevap

0

kod çalışıyorum ve koordinatlar geçersiz eğer varsayılan bir değer döndürür. Sadece bir şey için varsayılan bir değer kullanın, ancak aradığınız şeyi. Kodunuzdaki itibaren

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; 
} 

, ben board char dizisinin bir dizidir çıkarılabilir.

+0

Bunun nasıl çalıştığını anlamaya çalışıyorum. GetWithDefault'un tek işlevi, koordinatların menzil içinde olup olmadığını kontrol etmektir. – indexOutOfBounds

+0

Evet (ayrıca çok fazla yazı kaydeder). Gördüğünüz gibi, kontrol etmek için dört ** koşul vardır. –

+0

Evet anladım. Cevabınız için çok teşekkürler. – indexOutOfBounds

İlgili konular