2016-10-31 21 views
1

2つの要素の行/列の位置を比較して、隣接しているかどうかを調べようとしています。多くの検索の後、私はSOに関する同様の質問で私が探していたものを見つけることができませんでした。2次元配列の2要素を比較する

とにかく私の主な質問は、私のコード行の構文に関するものです。だからここに私が持っているものです。

基本的に
private boolean adjacent(int row, int col) 
{ 
    boolean adjacent = true; 
    Dot d2 = gameArray[row][col]; 
    Descriptor D2 = new Descriptor (row, col, d2); 
    Descriptor D1 = list.get(list.size()-1); 

    if (D1.row() == D2.row() && D1.col() == D2.col() +1) { 
     adjacent = true; 
    } 
    return adjacent; 
} 

私が探しているものをif行です。私はそれを単純にして、要素D2の場所colが+/- 1であるかどうかをチェックしたいので、絶対値を使用したいが、ArrayListメソッドではなく、|1|などの単純なものを使用したい。

if文の== D2.col()部分にはどうすれば実装できますか?

おかげ

それを行うには

答えて

3

一つの方法は次のとおりです。

if (Math.abs(D1.row() - D2.row()) + Math.abs(D1.col() - D2.col()) == 1) 

およびそれらのだけいるかのいずれかが1に等しく、他が同じであれば2非負の整数の合計は1でありますあなたが望むものを正確にゼロにします。

EDIT:あなたの質問をより慎重に読んだので、隣接する行の同じ列にある場合、2つの要素が隣接しているとはみなされません。次に、ステートメントはさらに簡単です:

if (D1.row() == D2.row() && Math.abs(D1.col() - D2.col()) == 1) 
+0

これは、要素の上下左右の両方で機能しますか? – Muldawg2020

+0

btwの場合、隣接する行の同じ列にある場合、隣接するとみなされます。基本的には、要素が別の要素の真上、下、左、または右にある場合、それらは隣接しているとみなされます。対角線だけが隣接としてカウントされません。 – Muldawg2020

+0

その場合、私の答えの最初の行が機能します。 2つの要素が隣接している場合、そのxsの「abs」またはysの「abs」のいずれかが1に等しく、もう1つは(対角線が隣接しないため)ゼロに等しいので、それらのabsの合計1に等しい - 正確にそのコード行がチェックするもの。 – Ishamael

関連する問題