Как заполнить двумерный массив / 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 шт):
Фактически достаточно вызвать для данного экземпляра 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);
}
// ...
Это крайне похоже на задание Я.Практикума) Я бы рекомендовал делать по подсказкам - не создавать двумерный массив, а создать массив из объектов 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();