public void updateSegmentSize(int nbShips) { int[] nbSegments = calculateRowsAndColumnsNeeded(nbShips/2, mapDimension); segmentEdgeWidth = (mapDimension.getWidth() + 1) / nbSegments[1]; segmentEdgeHeigth = (mapDimension.getHeight() + 1) / nbSegments[0]; List<INavigableVessel> registeredVessels = new ArrayList<>(); if (segments != null) { for (List<WeakReference<INavigableVessel>>[] outer : segments) { for (List<WeakReference<INavigableVessel>> inner : outer) { for (WeakReference<INavigableVessel> vessel : inner) { if (vessel.get() != null) { registeredVessels.add(vessel.get()); } } } } } segments = new List[nbSegments[1]][nbSegments[0]]; for (int i = 0; i < nbSegments[1]; i++) { for (int j = 0; j < nbSegments[0]; j++) { segments[i][j] = new ArrayList<>(); } } for (INavigableVessel registeredVessel : registeredVessels) { add(registeredVessel); } } @VisibleForTesting