Ir ao conteúdo
  • Cadastre-se

Java Método não soma valores


Posts recomendados

Criei o código e classes abaixo, mas quando concluo a execução, retorna apenas o valor da "salário", não retorna este acrescido do "valor do contrato". Já verifiquei várias vezes e não consigo identificar o que esta ocorrendo.

 

Ex.: se a remuneração for R$ 10.000,00 e eu cadastrar um contrato com o valor de 10 horas e R$ 10,00 a hora com data de 01/01/2022. Depois, se eu selecionar o mês para pesquisar a remuneração (que seria salário + valor do contrato) como sendo 01/2022, deveria ser somado mais R$ 100,000 ao salário, retornando ao final R$ 1.100,00, mas retorna apenas R$ 10.000,00. Em suma, não soma ao salário o valor do contrato daquele mês.

 

Estou utilizando a nova API de data do Java. Não sei se o erro esta na forma de utilizar a mesma. Não consegui identificar.

 

Agradeço muito se alguém puder me auxiliar a desvendar o que esta ocorrendo.

 

As classes são as abaixo:

 

MAIN


 

package Main;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
import java.util.Scanner;

import Enum.NiveisEnumerado;
import Entities.Empregado;
import Entities.Departamento;
import Entities.ContratoHora;

public class Aplicatioon {

    public static void main(String[] args) {
        
        Locale.setDefault(Locale.US);
        Scanner sc = new Scanner(System.in);
        
        System.out.println("Informe o Departamento: ");
        String departamento = sc.next();
        sc.nextLine();
        System.out.println("Informe o nome do empregado: ");
        String nomeempregado = sc.nextLine();
        System.out.println("Informe o nível do empregado: ");
        String nivel = sc.next();
        System.out.println("Informe o salário: ");
        Double salario = sc.nextDouble();
        Empregado empregado = new Empregado(nomeempregado, salario, NiveisEnumerado.valueOf(nivel), new Departamento(departamento));
        
        System.out.println("Informe quantos contratos serão cadastrados: ");
        int cadastrados = sc.nextInt();
        
        for(int i=1; i<=cadastrados; i++) {
            System.out.println("Informe a data do "+ i + "º contrato: ");
            String data = sc.next();
            DateTimeFormatter format = DateTimeFormatter.ofPattern("dd/MM/yyyy"); //converteu string em data
            LocalDate data1 = LocalDate.parse(data, format);        
            System.out.println("Quantidade de horas: ");
            Integer horascontrato = sc.nextInt();
            System.out.println("Valor por hora: ");
            Double valorhoracontrato = sc.nextDouble();
            ContratoHora contratohora = new ContratoHora(data1, horascontrato, valorhoracontrato);
            empregado.addcontrato(contratohora);
        }
        
        System.out.println("Informe o mês e ano a pesquisar: ");
        String mesano = sc.next();
        Integer mes = Integer.parseInt(mesano.substring(0,2));
        Integer ano = Integer.parseInt(mesano.substring(3));
        
        System.out.println("Dados do funcionário e remuneração total no mês informado: ");
        System.out.println("Nome: " + empregado.getNome());
        System.out.println("Departamento: " + empregado.getDepartamento().getNome());
        System.out.println("Remuneração: " + String.format("%.2f", empregado.remuneracao(mes, ano)));
        sc.close();
    }

}

 

CONTRATOHORA


 

package Entities;

import java.time.LocalDate;


public class ContratoHora {
    
    private LocalDate data1;
    private Integer horascontrato;
    private Double valorhoracontrato;
    
    
    public ContratoHora() {
        
    }
    
    public ContratoHora(LocalDate data1, Integer horascontrato, Double valorhoracontrato) {
        this.data1 = data1;
        this.horascontrato = horascontrato;
        this.valorhoracontrato = valorhoracontrato;
        
    }

    public LocalDate getData1() {
        return data1;
    }

    public void setData1(LocalDate data1) {
        this.data1 = data1;
    }

    public Double getValorhoracontrato() {
        return valorhoracontrato;
    }

    public void setValorhoracontrato(Double valorhoracontrato) {
        this.valorhoracontrato = valorhoracontrato;
    }

    public Integer getHorascontrato() {
        return horascontrato;
    }

    public void setHorascontrato(Integer horascontrato) {
        this.horascontrato = horascontrato;
    }
    
    public Double valordocontrato() {
        return valorhoracontrato*horascontrato;        
    }
}

 

DEPARTAMENTO


 

package Entities;

public class Departamento {

    private String nome;

    public Departamento() {
        
    }
    
    public Departamento(String nome) {
        this.nome = nome;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
    
}

 

EMPREGADO

package Entities;

import java.util.ArrayList;
import java.util.List;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

import Enum.NiveisEnumerado;

public class Empregado {

    private String nome;
    private Double salario;
    private NiveisEnumerado nivel;
    
    private Departamento departamento;
    private List<ContratoHora> contratos = new ArrayList<>();
    
    public Empregado() {
        
    }
    
    public Empregado(String nome, Double salario, NiveisEnumerado nivel, Departamento departamento) {
        this.nome = nome;
        this.salario = salario;
        this.nivel = nivel;
        this.departamento = departamento;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Double getSalario() {
        return salario;
    }

    public void setSalario(Double salario) {
        this.salario = salario;
    }

    public NiveisEnumerado getNivel() {
        return nivel;
    }

    public void setNivel(NiveisEnumerado nivel) {
        this.nivel = nivel;
    }

    public Departamento getDepartamento() {
        return departamento;
    }

    public void setDepartamento(Departamento departamento) {
        this.departamento = departamento;
    }

    public List<ContratoHora> getContratos() {
        return contratos;
    }
    
    public void addcontrato(ContratoHora contratohora) {
        contratos.add(contratohora);
    }
    
    public void removecontrato(ContratoHora contratohora) {
        contratos.remove(contratohora);
    }
    
    public Double remuneracao(Integer mes, Integer ano) {
        double sum = salario;            
    
        for(int i = 0; i<contratos.size(); i++) {
            DateTimeFormatter formatada = DateTimeFormatter.ISO_DATE;
            LocalDate data = contratos.get(i).getData1();
            String datast = formatada.format(data);     //transformou data da lista em string
            Integer c_mes = Integer.parseInt(datast.substring(4, 6));    //converteu string em inteiro
            Integer c_ano = Integer.parseInt(datast.substring(7));        //converteu string em inteiro
            if(mes == c_mes && ano == c_ano) {
                sum = sum + contratos.get(i).valordocontrato();    //chamou o valor do método para calcular o valor total do contrato
            }
        }    
        return sum;
    }
}

 

NIVEISENUMERADO

 

package Enum;

public enum NiveisEnumerado {

    INICIAL,
    INTERMEDIARIO,
    SENIOR;
    
}


 

 

 

Link para o comentário
Compartilhar em outros sites

O erro está no método que calcula a remuneração. Faça assim que funciona:

public double calcularRemuneracao(LocalDate data) {
    Predicate<Contrato> pertenceAoMesEAoAno = c -> {
        LocalDate inicio = data.withDayOfMonth(1).minusDays(1);
        LocalDate fim    = data.withDayOfMonth(data.lengthOfMonth()).plusDays(1);

        LocalDate dataContrato = c.getData();

        return dataContrato.isAfter(inicio) &&
               dataContrato.isBefore(fim);
    };

    double valorContratos = contratos.stream()
                                     .filter(pertenceAoMesEAoAno)
                                     .map(Contrato::getValorContrato)
                                     .reduce(Double::sum)
                                     .orElse(0.0);

    return salario + valorContratos;
}

 

Caso queira ver as modificações que eu fiz, segue o pacote:

src.7z

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!