Длина массива отличается? - PullRequest
0 голосов
/ 01 ноября 2019

Моя задача - создать метод, который принимает в качестве входных данных массив чисел с плавающей запятой в виде двойных чисел, представляющих зарплаты, и возвращает массив зарплат с каждой зарплатой, увеличенной на 5%.

Пока мой код:

public double[] salaryIncrease(double[] salary) {
    double tax = .05;
    double[] total_tax = { (salary[0] * tax) + salary[0], (salary[1] * tax) + salary[1], (salary[2] * tax) + salary[2] };
    return total_tax;

Однако выполнение этого кода приводит к сообщению об ошибке: array lengths differ, expected :<5> but was: <3>

Что такое ошибка в моем коде и как ее исправить?

PS.

Ввод: оклады [23000.50, 25478.66, 78496.50]

Вывод: Новые оклады [24150.525, 26752.593, 82421.325]

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Хорошей практикой будет инициализация размера результирующего массива на основе размера исходного массива, переданного методу в качестве параметра, например:

public static double[] salaryIncrease(double[] salary) {
        double tax = .05;
        double[] total_tax = new double[salary.length];  
        for (int i = 0; i < salary.length; i++) {
            total_tax[i] = salary[i] * tax + salary[i];
        }
        return total_tax;
}
0 голосов
/ 01 ноября 2019

Ваш код отлично работает на моем компьютере (Java 12):

import java.util.Arrays;

class Test
{
    public static double[] salaryIncrease(double[] salary) {
        double tax = .05;
        double[] total_tax = { (salary[0] * tax) + salary[0], (salary[1] * tax) + salary[1], (salary[2] * tax) + salary[2] };
        return total_tax;
    }

        public static void main(String[] args)
        {
            double[] input = {23000.50, 25478.66, 78496.50};

            System.out.println(Arrays.toString(salaryIncrease(input)));
        }

    } 
}

Хотя ваш код работает в этом случае, его можно улучшить, если принять во внимание общий случай, когда массив имеет большеили менее трех элементов. Чтобы достичь этого, вы можете изменить свой метод следующим образом:

public static double[] salaryIncrease(double[] salary) {
        double tax = .05;
        double[] total_tax = new double[salary.length];
        for(int i=0;i<salary.length;i++)
        {
            total_tax[i] = salary[i]*(1.0+tax); 
        }
        return total_tax;
    }

Используя потоки, вы даже можете закодировать эту функцию как однострочную:

public static double[] salaryIncrease(double[] salary) {
    return Arrays.stream(salary).map(s->s*1.05).toArray();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...