Zagadka z Iteratorem
Ciekawa zagadka znaleziona w sieci. Należy tak poprawić poniższy kod, aby na ekranie wyświetlił się napis Hello World
. Oczywiście wyjątek ConcurrentModificationException
(ani żaden inny) nie może się pojawić. Pozostałe obostrzenia to:
- w żaden sposób nie wolno modyfikować kodu poza sekcją
FIXME
- nie wolno użyć refleksji
- cały poniższy kod musi się wykonać; nie można użyć
System.exit(0)
lubreturn
public class IteratorPuzzle { public static void main(String[] args) { final Listlist = new ArrayList () {{ add("Hello"); }}; final Iterator iterator = list.iterator(); System.out.print(iterator.next()); list.add("World"); // FIXME: tutaj dopisujemy kod System.out.println(" " + iterator.next()); } }
Powodzenia:)
Ciekawe i poprawne rozwiązanie:) Może pojawi się jakaś odpowiedź bez użycia metod:
clear()
,trimToSize()
,ensureCapacity(int minCapacity)
lubremove(int index)
?A zwykle pirntln(„Hello World”) nie moze byc? Nigdzie nie jest napisane, ze trzeba uzyc tego iteratora czy listy 🙂
Niestety nie. Tak jak jest napisane, musi się wykonać cały zamieszczony kod. Można dodać coś od siebie tylko w sekcji FIXME. Jeśli umieścimy tam
System.out.println("Hello World");
, to:java.util.ConcurrentModificationException
– a nie powinienHelloHello World
– a powinno tylkoHello World
Kombinuj dalej:)
Hehe, racja, to samo System.out.println(” World”); w sekcji FIXME 😉
Nie umiem czytać. Cały zamieszczony kod ma się wykonać, eh