Поскольку я преподаю себе Java, я программировал такую игру, как линкор, но у меня возникла проблема с моим методом, чтобы убедиться, что при создании нового корабля я не добавляйте его, если все его значения местоположения не уникальны.Сравнение строк в двух разных arraylists
Я делаю что-то неправильно, потому что мой метод не работает, и я получаю повторяющиеся значения (или корабли с одинаковым местоположением).
У меня есть два ArrayLists:
- Первый список является ArrayList объектов кораблей (поле на моем игровом классе контроллера)
- Второй список является ArrayList из мест в виде a String (например, A5, B17 и т. д.) (это поле на моем объекте Ship)
Мой метод проверки того, имеет ли судно, которое я собираюсь добавить в объект ArrayList of Ship, местами являются следующие:
private boolean hasUniqueLocs(Ship ship) {
for (Ship x : theShips) {
for (String y : ship.shipLocation) {
System.out.println("Checking to see if " + x.shipLocation + " ship contains this value: " + y);
if (x.shipLocation.contains(y)) {
return false;
}
}
}
return true;
}
Итак, «theShips» - это мое поле ArrayList of Ships на GameController (с моим основным методом). И «shipLocation» - это мое поле ArrayList на объекте Ship, который содержит местоположения.
Оператор println() никогда не запускается, поэтому по какой-то причине я никогда не получаю циклы for?
Благодарим вас за какие-либо рекомендации или информацию, которые вы можете здесь предоставить!
Возможно, потребуется больше отладки. Запустите это через отладчик и посмотрите, если вы достигнете 'hasUniqueLocs()' или добавьте инструкцию печати в начале. Кроме того, у Маруна есть хорошая точка - если нет каких-либо мест, вы не достигнете заявления о печати. –
Вы проверили размер 'theShips' и' shipLocation'? – Maroun
, как уже упоминалось, отладка для проверки размера ваших списков, если ваш цикл не выполняется, вероятно, потому, что не найдены элементы для итерации. –