Функция для подсчета сумм строк двумерного массива

Помогите, пожалуйста, разобраться почему моя функция считает сумму значений вообще всего массива, а не только заданной мною строки?

Имеется массив в классе 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 то отнимайте единичку, чтобы не вылетать за пределы массива в случае двенадцатого месяца

→ Ссылка