@givemeanswer

Как правильно организовать вызов аргументов в консоли?

уважаемые пользователи сайта Хабр Q&A.
пишу вам, потому что я в отчаянии.
начал изучать джава
все было хорошо, пока не столкнулся с заданием. которое не могу сделать уже почти месяц!
обуглил весь интернет. штудировал учебники. но внятного решения задачи так и не нашел.
преподаватель забил болт и ничего не может(или не хочет) объяснять(
понимаю, для кого-то (скорее всего для большинства) это покажется элементарным.
но на данный момент, для меня, это задание является очень сложным!
я написал код, но совершенно не понимаю как его исправить.

задание:
Разработать список дел, которым можно управлять командами в консоли. Команды LIST, ADD, EDIT, DELETE. LIST должен выводить дела с их порядковыми номерами. ADD - добавлять дело в конец списка или дело на определённое место, сдвигая остальные дела вперёд, если указать номер. EDIT - заменять дело с указанным номером. DELETE - удалять. Примеры команд:

LIST

ADD Какое-то дело

ADD 4 Какое-то дело на четвёртом месте

EDIT 3 Новое название дела

DELETE 7

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Scanner;
import java.io.IOException;
import java.util.NoSuchElementException;
import java.util.InputMismatchException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) throws IOException {

        System.out.println("Список команд: LIST открывает список, ADD добавляет что-то в список, DELETE удаляет что-то из списка");
        System.out.println("Вызовите команду : ");
        ArrayList<String> todoList = new ArrayList<>() {{
            add(0, "Почистить зубы");
            add(1, "Сделать зарядку");
            add(2, "Выпить стакан воды");
            add(3, "Приготовить завтрак");
            add(4, "Отправиться на работу");

        }};
        while (true) {
            Scanner sc = new Scanner(System.in);
            switch (sc.nextLine()) {
                case "LIST":
                    System.out.println("Ваш список дел: " + todoList);
                    continue;

                case "ADD":
                    System.out.println("Добавить дело в список: ");
                    todoList.add(sc.nextLine());
                    System.out.println("Дело добавленно!" + " номер в списке: " + todoList.size());
                    continue;

                case "DELETE":
                    System.out.println("Удалить дело из списка: ");
                        todoList.remove(sc.nextInt() - 1);
                        System.out.println("Дело удалено! " + todoList.size());
                    continue;

                default:
                    System.out.println("Давайте выберем действие!");
                    break;
            }
        sc.close();
        }

    }
}


помощи, правда, не откуда ждать...
  • Вопрос задан
  • 2327 просмотров
Пригласить эксперта
Ответы на вопрос 3
@WaterSmith
Android-разработчик. Java, Kotlin
Было бы здорово, если бы вы написали, что конкретно не работает в вашем коде.
Из тех ошибок что я заметил:
sc.nextLine() - возвращает строку введенную пользователем
следовательно команда: ADD 4 Какое-то дело на четвёртом месте
не попадет в ветку case "ADD"
т.е. как минимум вам нужно после получения строки sc.nextLine() - сохранять ее в переменную, парсить, выделять из нее команды и параметры, а уже потом описывать ваш switch

А сейчас, у вас по идее работает только LIST а на все остальное вы получаете "давайте выберем действие"
Ответ написан
Комментировать
Konstantin18ko
@Konstantin18ko
Стоматолог
Первое, что я бы рекомендовал: ассоциациированные массивы.
Второе чтоб я рекомендовал: забить на первый пункт и посмотреть в сторону SQL или NoSQL.
Третье: реализация аргументов в данном примере долна быть более адекватной.
Ответ написан
Комментировать
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Приветствую)
На самом деле это все довольно просто реализуется. Соглашусь с Константином по поводу хранения данных. Можете для хранения данных использовать SQLite или же писать в какой-нибудь txt или любой другой файл. А далее при обращении циклом доставать сохраненную информацию.
Что касается команд, то вы не пробовали поискать готовые либы?
Подсказка - JCommander
jcommander.org
Остается придумать свои комманды и реализовать задачу.

Как вариант - более усложненный вариант использовать Spring и реализовать консольное приложение с использованием jCommander и использовать возможности hibernate + jpa для реализации ORM для удобства обращения с БД...

Возможно, что есть более интересные варианты реализации, но я бы использовал JCommander
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы