Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Помогите реализовать многоуровневое меню в консоли


Автор: TAIMOS 14.5.2011, 23:39
Здравствуйте. Передо мной стоит задача реализовать меню в консоли, что-то типа: 
1. Select artist 
2. Add new artist 
3. Remove artist 

Ввели 1: 
1. Select album 
2. Add new album 
3. Remove album 
4. Back 

Само меню хранится в XML-файле. Я его распарсиваю JDOM'oм в объект. Потом, в зависимости от того, какую цифру ввел пользователь, через switch вывожу на экран информацию + меню. Все бы хорошо, но вот допустим есть у нас на 2 уровне "2. Add new album". После добавления альбома нужно, чтоб вывелось то же меню. То есть нужно, чтоб case 2: повторился заново. Но с помощью switch такого добиться невозможно. Подскажите альтернативу. 

Вот кусок switch'a, чтобы вам было лучше видно суть проблемы: 
Код

        switch(choice) {
            // Albums
            case 1:
                // Get and show artist obj
                Artist artist = selectArtist();
                artist.showArtist();
                // Get and show menu "Albums"
                MenuItem menuItemAlbums = model.getMenuItem(11);
                menuItemAlbums.show();
                // Get data from user
                Scanner input11 = new Scanner(System.in);
                int choice11 = Integer.parseInt(input11.next());
                // Songs
                switch(choice11) {
                    case 1:
                        // Get and show album obj
                        Album album = selectAlbum(artist);
                        album.showAlbum();
                        // Get and show menu "Songs"
                        MenuItem menuItemSongs = model.getMenuItem(111);
                        menuItemSongs.show();
                        // Get data from user
                        Scanner input111 = new Scanner(System.in);
                        int choice111 = Integer.parseInt(input111.next());
                        switch(choice111) 

Помогите, пожалуйста.

Автор: _Y_ 15.5.2011, 10:02
По-разному можно сделать.
1. Рекурсия. switch загоняем в вызываемый рекурсивно метод, которому передается параметр choice.  После добавления альбома рекурсивно вызываем тот же метод с тем же параметром.

2. State machine. Строим вокруг switch цикл с выходом по условию, зависящему от величины choice. В каждой ветке switch-а присваиваем или не присваиваем choice новое значение.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)