2014-01-03 4 views
1

Поскольку я преподаю себе Java, я программировал такую ​​игру, как линкор, но у меня возникла проблема с моим методом, чтобы убедиться, что при создании нового корабля я не добавляйте его, если все его значения местоположения не уникальны.Сравнение строк в двух разных arraylists

Я делаю что-то неправильно, потому что мой метод не работает, и я получаю повторяющиеся значения (или корабли с одинаковым местоположением).

У меня есть два ArrayLists:

  1. Первый список является ArrayList объектов кораблей (поле на моем игровом классе контроллера)
  2. Второй список является 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?

Благодарим вас за какие-либо рекомендации или информацию, которые вы можете здесь предоставить!

+2

Возможно, потребуется больше отладки. Запустите это через отладчик и посмотрите, если вы достигнете 'hasUniqueLocs()' или добавьте инструкцию печати в начале. Кроме того, у Маруна есть хорошая точка - если нет каких-либо мест, вы не достигнете заявления о печати. –

+4

Вы проверили размер 'theShips' и' shipLocation'? – Maroun

+1

, как уже упоминалось, отладка для проверки размера ваших списков, если ваш цикл не выполняется, вероятно, потому, что не найдены элементы для итерации. –

ответ

1

Хорошо, я взорвал его. Я по-прежнему новичок в использовании отладчика, и я должен был пойти туда первым, но я так привык к ошибкам в своем коде, что, как я полагал, это была проблема, и что что-то было в арраистах, которых я не понимал.

После отладки я понял, что на самом деле я не добавлял корабли до конца метода, который вызывал этот метод, поэтому, как вы, ребята, указали, в арраилах еще не было объектов. Было очень легко увидеть мою проблему, как только у меня было это направление.

Спасибо всем!

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