2016-10-31 6 views
1

Итак, я пытаюсь сравнить расположение строк/столбцов из двух элементов, чтобы увидеть, смежны ли они. После долгих поисков я не смог найти то, что искал по подобным вопросам на SO.Сравнение двух элементов в 2D-массиве

В любом случае, мой главный вопрос касается только синтаксиса одной из моих строк кода. Итак, вот что у меня есть:

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 0//- 1. Поэтому я хотел использовать абсолютное значение, но не как метод ArrayList, просто что-то простое, например |1| или что-то в этом роде.

Как бы реализовать это в == D2.col() части инструкции if?

Благодаря

ответ

3

Один из способов сделать это:

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

Сумма двух неотрицательных целых чисел 1, если и только если точно один из них равен 1, а другой равен к нулю, именно то, что вы хотите.

EDIT: теперь, когда я внимательно прочитал ваш вопрос, я понимаю, что вы не считаете, что два элемента смежны, если они находятся в одном столбце в соседних строках. Тогда заявление еще проще:

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

Таким образом, это работает как слева, так и справа от элемента, а также выше и ниже? – Muldawg2020

+0

btw, THEY считаются смежными, если они находятся в одном столбце в соседних строках. В основном они считаются смежными, если элемент находится непосредственно сверху, снизу, слева или справа от другого. Только диагонали не считаются соседними. – Muldawg2020

+0

В этом случае первая строка в моем ответе будет работать. Если два элемента смежны, либо 'abs' их xs, либо' abs' их ys равен единице, а другой равен нулю (поскольку диагонали не смежны), и поэтому сумма этих 'abs' равна одной - именно то, что проверяет эта строка кода. – Ishamael

Смежные вопросы