Сложность с возвращением значения метода с неопределенным числом аргументов
Прохожу методы с неопределенным числом аргументов, пытаюсь сделать так, чтобы можно было рассчитать зарплату с премией и без 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), а массивом (множеством) целочисленных переменных (знак троеточия - это и есть массив). Поэтому просто суммировать данную переменную не получится, к массивам неприменимы математические операции. Придется перебирать массив и совершать нужное действие с каждой отдельной переменной , находящейся в массиве, что , собственно, и сделано с помщью цикла либо стрима.