2016-10-01 1 views
1

В игре с головоломкой, подобной бомбардировщику, эти линии сделаны, чтобы идентифицировать лучшее место, чтобы сбросить бомбу (между двумя ящиками). Это сетка 13 * 11.Координаты ArrayLists должны иметь одинаковый размер

Когда я проверяю размер двух объектов, один чулок X намного больше, чем другой. Предполагается, что они имеют одинаковый размер с каждой координатой X, идущей с его Y.

Будучи первыми лучшими ходами на той же оси Y, я подозреваю, что второй арраист не создаст новую комнату для их хранения (но это ArrayList, а не Set?).

ArrayList<Integer> bestSpotX=new ArrayList<Integer>();  
ArrayList<Integer> bestSpotY=new ArrayList<Integer>(); 
// ... 
for (int line=0, col=0;line<11 && col<13;line++, col++) {  
    if ((map[line].charAt(col)=='0')&&(map[line+2].charAt(col)=='0')) { 
    bestSpotX.add(col); 
    bestSpotY.add(line+1); 
    }  
} 

Является ли моя итерация ложной, или это так, как я добавляю значения координат?

+0

«Когда я проверяю размер двух объектов, один чулок X намного больше, чем другой». В вашем вопросе нет кода, в котором вы проверяете это утверждение. Из представленного кода есть много шансов, когда все может пойти не так, как раньше, или после цикла. –

+0

Извините за мой бедный английский, Адриан. На самом деле, я уверен в остальной части кода, потому что он работает хорошо, когда он повторяется на простом массиве, но он обязывает меня «жестко кодировать» длину (каждая игра, изменение позиции ящиков и, следовательно, хорошие комбинации) , Вот почему я выбрал ArrayList. – GwadaKing

ответ

0

Почему:

ArrayList<Integer> bestSpotX=new ArrayList<Integer>();  
ArrayList<Integer> bestSpotY=new ArrayList<Integer>(); 

и нет:

class LineColLocation { 
    protected int line, col; 

// constructors, setters and getters 
} 

ArrayList<LineColLocation> bestSpots=new ArrayList<LineColLocation>();  


int bestSpotLine=...; // ... whatever logic to ... 
int bestSpotCol=...; // determine a *best spot* 

LineColLocation bestSpot=new LineColLocation(bestSpotLine, bestSpotCol); 
bestSpots.add(bestSpot); 

Таким образом, вы не сможете случайно связываться с ** неявного требования * от same number of X and Y in two different lists - вы просто материализовать это ограничение (сделайте это явным), сделайте ненужным проверку этого ограничения, и вы будете уверены, что каждый раз, когда вы не можете ввергнуть вещи.

+0

Большое спасибо. Я новичок в Java, я всегда закодирован на C и должен думать «Объект»! – GwadaKing