Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Minha solução sem o Switch

Fiquei tentado em colocar os ifs dentro dos elses porém não achei que ficou legal para a leitura.

public class AtividadeOpcionalAliquota {

    public static void main(String[] args) {

        double salario = 3300.00;
        double novosalario;

        if (salario >= 1900.00 && salario <= 2800.00) {
            novosalario = salario - 142;
            System.out.println("Dedução de R$ 142.00");
            System.out.println("O novo salário é de R$ " + novosalario);
        } else {
            if (salario >= 2800.01 && salario <= 3751.00) {
                novosalario = salario - 350;
                System.out.println("Dedução de R$ 350.00");
                System.out.println("O novo salário é de R$ " + novosalario);
            } else {
                if (salario >= 3751.01 && salario <= 4664.00) {

                    novosalario = salario - 636;
                    System.out.println("Dedução de R$ 636.00:");
                    System.out.println("O novo salário é de R$ " + novosalario);
                }
            }
        }
    }
}
1 resposta
solução!

A solução ideal para esse problema é o uso do padrão strategy. Fica um exemplo.

Aliquot.java

package aliquot;

import java.util.function.Function;
import java.util.function.Predicate;

public interface Aliquot extends Predicate<Double>, Function<Double, Double> {
    double debit();

    @Override
    default boolean test(Double aDouble) {
        return false;
    }

    @Override
    default Double apply(Double aDouble) {
        return aDouble - debit();
    }
}

Aliquots.java

package aliquot;

import java.util.Arrays;

public enum Aliquots implements Aliquot {
    MINIMUM {
        @Override
        public double debit() {
            return 142.0;
        }

        @Override
        public boolean test(Double aDouble) {
            return aDouble >= 1900.00 && aDouble <= 2800.00;
        }
    },

    INTERMEDIARY {
        @Override
        public double debit() {
            return 350.0;
        }

        @Override
        public boolean test(Double aDouble) {
            return aDouble > 2800.00 && aDouble <= 3751.00;
        }
    },

    MAXIMUM {
        @Override
        public double debit() {
            return 636.0;
        }

        @Override
        public boolean test(Double aDouble) {
            return aDouble > 3751.00 && aDouble <= 4664.00;
        }
    };

    static Aliquot selectBy(double salary) {
        return Arrays.stream(Aliquots.values())
                     .map(v -> (Aliquot) v)
                     .filter(a -> a.test(salary))
                     .findFirst()
                     .orElse(() -> 0.0);
    }
}

OptionalActivityAliquot.java

package aliquot;

public class OptionalActivityAliquot {
    public static void main(String[] args) {
        double salary = 3300.0;

        var aliquot = Aliquots.selectBy(salary);

        System.out.println("Dedução de R$ " + aliquot.debit());
        System.out.println("O novo salário é de R$ " + aliquot.apply(salary));
    }
}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software