мальчик высаживает второго мальчика на втором берегу, сам отправляется на первый. там, он выходит из лодки и сажает вместо себя солдата. солдат перемещается на второй берег и выходит. "за руль" садится мальчик и плывет к 1ому берегу, берет 2ого пацана и они оба "едут" на второй берег. там один мальчик выходит. 2ой отправляется на первый берег меняется местами со вторым солдатом и солдат плывет на второй берег. там второй пацан садится в лодку и плывет на первый берег за другом. Результат: бойцы переправились, а мальчики снова катаются.
Удачи..
наверно подразумевается "противополных знаков". вначале немного подумайте над алгоритмом.
заведите место хранения вводимых чисел (в примитивном случае - массив из 4х эл-тов, в общем - список arraylist,
подсчитывайте количество введённых чисел (или сразу считайте скольк=4).
помещайте модуль ( math.abs() ) в хранилище, если такого там ещё нет (в map не надо проверять, это множество). на выходе сравните количество введённых и заполненную длину хранилища: разница даст количество "противоположных чисел".
ну, а вы же учитесь, а не я.
Сначала на ту сторону поплывет один мальчик и один солдат затем солдат останется а мальчик приплывет. Затем на лодку к мальчику сядет второй солдат и поплвет на другую сторону.