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) lub return
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:)

8 komentarzy to “Zagadka z Iteratorem”

  • dembol says:
    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());
        }
    }
    
  • Barista says:

    Ciekawe i poprawne rozwiązanie:) Może pojawi się jakaś odpowiedź bez użycia metod: clear(), trimToSize(), ensureCapacity(int minCapacity) lub remove(int index)?

  • Jarek says:

    A zwykle pirntln(„Hello World”) nie moze byc? Nigdzie nie jest napisane, ze trzeba uzyc tego iteratora czy listy 🙂

    • Barista says:

      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:

      • niestety poleci wyjątek java.util.ConcurrentModificationException – a nie powinien
      • wyświetli się HelloHello World – a powinno tylko Hello World

      Kombinuj dalej:)

  • Jarek says:

    Nie umiem czytać. Cały zamieszczony kod ma się wykonać, eh

  • Kerai says:
    Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
    			@Override
    			public void uncaughtException(Thread t, Throwable e) {
    				System.out.println(" World");
    			}
    		});
    
  • Dant says:
    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());
    	}
    

Leave a Reply