Функция для подсчета сумм строк двумерного массива
Помогите, пожалуйста, разобраться почему моя функция считает сумму значений вообще всего массива, а не только заданной мною строки?
Имеется массив в классе StepTracker:
public class StepTracker {
int [][] array = new int[12][30];
public void summOfStepsPerMonth(int month) { // Функция должна считать общее количество шагов за выбранный месяц. Но считает общее кол-во шагов за год.
int sum = 0;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
sum = (sum + array[i][j]);
}
}
System.out.println(sum);
}
}
12 месяцев и в каждом по 30 дней.
Месяц в функции выбирается исходя из того, что пользователь ввёл в консоль. Мне нужно чтобы эта функция считала сумму чисел в выбранном пользователем месяце.
Имеется основной класс который считывает ввод пользователя:
public class Main {
public static void main(String[] args) {
StepTracker stepTracker = new StepTracker();
Scanner scanner = new Scanner(System.in);
printMenu();
int userInput = scanner.nextInt();
while (userInput != 6) {
// Обработка разных случаев
if (userInput == 1) {
System.out.println("\n 1 - Январь; 2 - Февраль; 3 - Март; 4 - Апрель; 5 - Май; 6 - Июнь; 7 - Июль; 8 - Август; 9 - Сентябрь; 10 - Октябрь; 11 - Ноябрь; 12 - Декабрь. \n");
System.out.print("Введите номер месяца: ");
int month = scanner.nextInt();
System.out.print("Введите номер дня от 1 до 30: ");
int day = scanner.nextInt();
System.out.print("Введите количество пройденных шагов за " + day + " день месяца: " );
int steps = scanner.nextInt();
stepTracker.isDailyStepsNotNegative(month, day, steps);
} else if (userInput == 2) {
System.out.print("Введите номер месяца: ");
int month = scanner.nextInt();
stepTracker.printMonth(month);
} else if (userInput == 3) {
System.out.println("\n Статистика за год: ");
stepTracker.printArray();
} else if (userInput == 4) {
System.out.print("Введите номер месяца: ");
int month = scanner.nextInt();
stepTracker.summOfStepsPerMonth(month);
} else if (userInput == 5) {
System.out.println("команда 5");
} else if (userInput == 6) {
// Это выход из программы
} else {
System.out.println("\nТакой команды нет. Введите команду от 1 до 5.");
}
printMenu(); // Печатаем меню еще раз перед завершением предыдущего действия
userInput = scanner.nextInt(); // Повторное считываение данных от пользователя
}
System.out.println("Программа завершена.");
}
private static void printMenu() {
System.out.println("\n Что вы хотите сделать?\n");
System.out.println("1) Ввести количество шагов за месяц и за день.");
System.out.println("2) Напечатать статистику за месяц. ");
System.out.println("3) Напечатать статистику за год. ");
System.out.println("4) Узнать общее количество шагов за месяц.");
System.out.println("5) Изменить цель по количеству шагов в день.");
System.out.println("6) Выйти из приложения");
System.out.print("\n Ввведите команду: ");
}
}
Понимаю что вопрос очень глупый, и ответ лежит где-то на поверхности, но, я сижу уже 3-4 часа и не продвинулся вообще. Я не понимаю что делаю не так. Прошу вас отнестись с пониманием, так как я только учусь. Подскажите, пожалуйста, в каком направлении двигаться?
Ответы (1 шт):
Все вроде очевидно: вы крутите два вложенных цикла, опираясь на длину массива в каждом из них. Внешний цикл перебирает все месяцы, внутренний цикл перебирает все дни в каждом месяце. А ваша переменная month болтается в воздухе и никак не используется. Почему же тогда вас удивляет, что вы получаете сумму всего массива? Перепишите свой метод примерно так:
public int summOfStepsPerMonth(int month) {
int sum = 0;
for (int j = 0; j < array[month].length; j++) {
sum += array[month][j];
}
return sum;
}
Единственное, что месяцы в массиве у вас нумеруются с 0 до 11, посему, если в переменную month вы передаете номер месяца с с 1 до 12 то отнимайте единичку, чтобы не вылетать за пределы массива в случае двенадцатого месяца