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 List list = 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:)
public class IteratorPuzzle { public static void main(String[] args) { final List list = new ArrayList() {{ add("Hello"); }}; final Iterator iterator = list.iterator(); System.out.print(iterator.next()); list.add("Hello"); for (int i = Integer.MIN_VALUE; i < Integer.MAX_VALUE - 2; i++) { list.clear(); } list.add("Hello"); list.add("World"); System.out.println(" " + iterator.next()); } }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 WorldKombinuj dalej:)
Hehe, racja, to samo System.out.println(” World”); w sekcji FIXME 😉
Nie umiem czytać. Cały zamieszczony kod ma się wykonać, eh
Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(Thread t, Throwable e) { System.out.println(" World"); } });public static void main(String[] args) { final List list = new ArrayList() {{ add("Hello"); }}; final Iterator iterator = list.iterator(); System.out.print(iterator.next()); list.add("World"); // FIXME: tutaj dopisujemy kod if(1==1)System.out.println(" World");else System.out.println(" " + iterator.next()); }