Как заполнить двумерный массив / HashMap с помощью scanner

Прошу вашей помощи, самостоятельно обучаюсь java.

Имеется следующее задание:

Необходимо создать календарь на 12 месяцев, в каждом месяце 30 дней. Мне нужно чтобы пользователь мог с помощью ввода (scanner) заполнить количество шагов по каждому дню в каждом месяце. Меню для ввода должно вызываться в классе Main, а сам массив должен находиться в классе StepTracker. Итого: Январь: 1й день - 100 шагов.

Подскажите, пожалуйста как это можно реализовать?

Пересмотрел уйму видео-уроков но так и не могу понять. Понимаю что вопрос глупый, отнеситесь, пожалуйста, с пониманием. Мне очень трудно без чьей-либо помощи разобраться.

Мой код в классе Main:

public static void main(String[] args) {
        StepTracker stepTracker = new StepTracker(); // Создал объект на основе класса StepTracker
        Scanner scanner = new Scanner(System.in);
        printMenu(); // Меню для печати
        int userInput = scanner.nextInt();

        while (userInput != 4) {


            // Обработка разных случаев

            if (userInput == 1) {
                System.out.println("Введите название месяца: ");
                int month = scanner.nextInt();
                System.out.println("Введите номер дня: ");
                int data = scanner.nextInt();
                System.out.println("Введите количество пройденных шагов: ");
                int steps = scanner.nextInt();
                stepTracker.array = scanner.nextInt();





            } else if (userInput == 2) {
                System.out.println("команда 2"); // Команды будут позже

            } else if (userInput == 3) {
                System.out.println("команда 3"); // Команды будут позже

            } else if (userInput == 4) {
                System.out.println("команда 4"); // Команды будут позже

            } else {
                System.out.println("Такой команды нет"); 
                break;
            }
            printMenu(); // Печатаем меню еще раз перед завершением предыдущего действия
            userInput = scanner.nextInt(); // Повторное считываение данных от пользователя


        }
        System.out.println("Программа завершена");
    }

    private static void printMenu() {
        System.out.println("Что вы хотите сделать?");
        System.out.println("1) Ввести количество шагов за" + "день.");
        System.out.println("2) Напечатать статистику за" + "день.");
        System.out.println("3) Изменить цель по количеству шагов в" + "день.");
        System.out.println("4) Выйти из приложения");
        System.out.print("Ввведите команду: ");


    }
} 

Мой код в классе StepTracker:

public class StepTracker {

    int [][] array = new int[12][30];

    public void setMonth (int month, int data, int steps) {
           }
}

Я просто не понимаю что дальше писать.


Ответы (2 шт):

Автор решения: Nowhere Man

Фактически достаточно вызвать для данного экземпляра stepTracker заданный метод (переименован в setStepsOnDate) со введёнными значениями месяца, дня, количества шагов. Может потребоваться проверка ввода и коррекция дня и месяца при адресации элементов массива:

public class StepTracker {

    int [][] array = new int[12][30];

    /**
      * @param month 1..12
      * @param day   1..30
      * @param steps 0..10_000_000
      */
    public void setStepsOnDate(int month, int day, int steps) {
        array[month - 1][day - 1] = steps;
    }
}
    if (userInput == 1) {
        System.out.println("Введите название месяца: ");
        int month = scanner.nextInt();
        System.out.println("Введите номер дня: ");
        int day = scanner.nextInt();
        System.out.println("Введите количество пройденных шагов: ");
        int steps = scanner.nextInt();
        stepTracker.setStepsOnDate(month, day, steps);
    }
    // ...
→ Ссылка
Автор решения: Kirill Skladanov

Это крайне похоже на задание Я.Практикума) Я бы рекомендовал делать по подсказкам - не создавать двумерный массив, а создать массив из объектов MonthData. Двумерные массивы ревьюеры часто не принимают. Получается, что у нас в массиве лежит 12 объектов MonthData. а в каждом из этих объектов хранится массив с числом шагов за каждый день. Вот так будет примерно все выгдядеть:

public class StepTracker {
    int stepsTarget=10000;
    MonthData[] monthToData;
    Converter converter = new Converter();

    public StepTracker() {
        monthToData = new MonthData[12];
        for (int i = 0; i < monthToData.length; i++) {
            monthToData[i] = new MonthData();
        }
    }

А вот так можно будет вводить данные по каждому дню:

    System.out.println("Введите количество шагов: ");
    monthToData[month].dayData[day]=scanner.nextInt();
→ Ссылка