package listiterator1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

/**
 * Demonstriert die Verwendung des ListIterators.
 * 
 * @author Ralf Kunze (rkunze@uos.de), Institut fuer Informatik, Universitaet
 *         Osnabrueck
 * @date 18.05.2007
 */
public class ListIteratorTest {

	private static BufferedReader reader = new BufferedReader(
			new InputStreamReader(System.in));

	public static void main(String[] args) {
		List<Integer> l = new LinkedList<Integer>();
		boolean stop = false;

		for (String s : "1 2 3 4 5 6 7 8 9 0".split(" "))
			l.add(Integer.parseInt(s));

		ListIterator<Integer> iterator = l.listIterator();

		while (!stop) {
			switch (readChar()) {
			case 1:
				if(iterator.hasNext())
					iterator.next();
				else
					System.out.println("Weiter nach rechts gehts nicht!");
				break;
			case 2:
				if (iterator.hasPrevious())
					iterator.previous();
				else
					System.out.println("Weiter nach links gehts nicht!");
				break;
			case 3:
				System.out.print("Bitte eine Zahl: ");
				String s;
				try {
					s = reader.readLine();
					iterator.add(Integer.parseInt(s));
				} catch (IOException e) {
					System.err.println("Kann nicht von stdin lesen. Tschoe!");
					System.exit(1);
				} catch (NumberFormatException e1) {
					System.err
							.println("Sie haben keine vernuenftige Zahl eingegeben");
				}
				break;
			case 4:
				iterator.remove();
				break;
			case 5:
				System.out.println(l);
				break;
			case 9:
				System.out.println("Das wars ...");
				stop = true;
				break;
			default:
				System.out.println("Falsche Eingabe!");

			}
		}

	}

	private static int readChar() {
		String s = null;

		while (true) {
			System.out.println("Ihre Wahl:");
			System.out.println("  1) nach rechts gehen");
			System.out.println("  2) nach links gehen");
			System.out.println("  3) Element einfuegen");
			System.out.println("  4) Element loeschen");
			System.out.println("  5) Liste ausgeben");
			System.out.println("  9) Programmende");
			try {
				s = reader.readLine();
			} catch (IOException e) {
				System.err.println("Could not read from stdin.");
				System.exit(1);
			}

			try {
				return Integer.parseInt(s);
			} catch (NumberFormatException e) {
				System.err.println("Keine Zahl, nochmal ...");
			}
		}
	}

}
