Сложность с возвращением значения метода с неопределенным числом аргументов

Прохожу методы с неопределенным числом аргументов, пытаюсь сделать так, чтобы можно было рассчитать зарплату с премией и без monthSalary. Однако на строке

monthSalary = monthSalary+prize; 

в консоли возникает ошибка: ';' expected. Как это можно обойти и что тут неправильно?

public static class Salary {


    public static int calcSalary(int payment, int hours, int... prize) {
        int monthSalary = payment * hours;
        monthSalary = monthSalary + prize;
        return monthSalary;
    }


    public static void main(String[] args) {
        Salary aprilSalary = new Salary();
        Salary maySalary = new Salary();


        System.out.println("My salary in April is " + aprilSalary.calcSalary(500, 160, 3000));


    }
}
}

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

Автор решения: Алексей Шиманский

prize - это массив. Поэтому как минимум надо брать prize[0]

А вообще судя по коду у вас лишняя закрывающая фигурная скобка

→ Ссылка
Автор решения: Дмитрий

Насколько я понял, раз вы передаете неограниченное количество аргументов в метод, то в самом методе вы хотите получить их сумму, в этом случае метод нужно переписать так:

public static int calcSalary(int payment, int hours, int... prize) {
    return payment * hours + IntStream.of(prize).sum();
}

Тоже самое можно седлать с помощью цикла:

public static int calcSalary(int payment, int hours, int... prize) {
    int monthSalary = payment * hours;
    for (int p : prize) monthSalary += p;
    return monthSalary;
}

В любом случае нужно понимать, что в методе calcSalary переменная int... prize является не просто целочисленной переменной (int), а массивом (множеством) целочисленных переменных (знак троеточия - это и есть массив). Поэтому просто суммировать данную переменную не получится, к массивам неприменимы математические операции. Придется перебирать массив и совершать нужное действие с каждой отдельной переменной , находящейся в массиве, что , собственно, и сделано с помщью цикла либо стрима.

→ Ссылка