Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Tipos que não podem ser convertidos para a classe

Criei um código para calcular salário, entretanto, ao compilar é apresentada a mensagem do titulo (ou algo similar)

public class Empregado
{
    //processo de criação de instâncias
    private String nome;
    private int horaTrabalhada;
    private double salarioHora;
    private double salarioFinal;


    //criação do construtor para iniciar as instâncias
    public Empregado( String nomes, int horasTrabalhada, double salarioHoras, double salarioTotal)
    {
        nome = nomes;
        horaTrabalhada = horasTrabalhada;
        salarioHora = salarioHoras;
        salarioFinal = salarioTotal;
    }

    public void setnome( String nomes )
    {
        nome = nomes;
    }

    public String getnome()
    {
        return nome;
    }

    public void sethoraTrabalhada( int horasTrabalhada )
    {
        horaTrabalhada = horasTrabalhada;    
    }

    public int gethoraTrabalhada()
    {
        return horaTrabalhada;
    }

    public void setsalarioHora( double salarioHoras )
    {
        salarioHora = salarioHoras;    
    }

    public double getsalarioHora()
    {
        return salarioHora;
    }

    public void setsalarioFinal( double salarioTotal )
    {
        if ( horaTrabalhada <= 40 )
        {
            salarioFinal = (double) horaTrabalhada * salarioHora;
        }
        else
            salarioFinal = (double) ((horaTrabalhada - 40) * (salarioHora * 1.5));
    }

    public double getsalarioFinal()
    {
        return salarioFinal;
    }

}
import java.util.Scanner;

public class calcula_salario
{
    public static void main( String[] args )
    {
        Scanner input = new Scanner(System.in);    

        Empregado empregado1 = new Empregado(empregado1.getnome(), empregado1.gethoraTrabalhada(), empregado1.getsalarioHora(), empregado1.getsalarioFinal());
        Empregado empregado2 = new Empregado(empregado2.getnome(), empregado2.gethoraTrabalhada(), empregado2.getsalarioHora(), empregado1.getsalarioFinal());
        Empregado empregado3 = new Empregado(empregado3.getnome(), empregado3.gethoraTrabalhada(), empregado3.getsalarioHora(), empregado1.getsalarioFinal());

        System.out.print("Digite o nome do empregado1: " );
        empregado1 = input.nextLine();

        System.out.print("Digite a quatidade de horas trabalhadas do empregado1 : ");
        empregado1 = input.nextInt();

        System.out.print("Digite o nome do empregado1: " );
        empregado1 = input.nextDouble();

        System.out.print("Digite o nome do empregado2: " );
        empregado2 = input.nextLine();

        System.out.print("Digite a quatidade de horas trabalhadas do empregado2 : ");
        empregado2 = input.nextInt();

        System.out.print("Digite o nome do empregado2: " );
        empregado2 = input.nextDouble();

        System.out.print("Digite o nome do empregado3: " );
        empregado3 = input.nextLine();

        System.out.print("Digite a quatidade de horas trabalhadas do empregado3 : ");
        empregado3 = input.nextInt();

        System.out.print("Digite o nome do empregado3: " );
        empregado3 = input.nextDouble();

        empregado1.getsalarioFinal();
        empregado2.getsalarioFinal();
        empregado3.getsalarioFinal();

        System.out.printf("Nome: %s\nQuantidade de horas trabalhadas: %d\nSalario-Hora: %.2f\nSalario Total: %.2f\n", empregado1.getnome(), empregado1.gethoraTrabalhada(), empregado1.getsalarioHora(), empregado1.getsalarioFinal());
        System.out.printf("Nome: %s\nQuantidade de horas trabalhadas: %d\nSalario-Hora: %.2f\nSalario Total: %.2f\n", empregado2.getnome(), empregado2.gethoraTrabalhada(), empregado2.getsalarioHora(), empregado2.getsalarioFinal());
        System.out.printf("Nome: %s\nQuantidade de horas trabalhadas: %d\nSalario-Hora: %.2f\nSalario Total: %.2f\n", empregado3.getnome(), empregado3.gethoraTrabalhada(), empregado3.getsalarioHora(), empregado3.getsalarioFinal());

    }
}

Por que que está ocorrendo o erro de não converter os tipos das instâncias criadas para a classe Empregado

Grato

4 respostas
solução!

Boa noite Fabio,

Haviam alguns erros de lógica no código, refiz algumas partes, compare com o seu código:

Classe Empregado:



public class Empregado
{
    //processo de criação de instâncias
    private String nome;
    private int horaTrabalhada;
    private double salarioHora;
    private double salarioFinal;


    //criação do construtor para iniciar as instâncias
    public Empregado( String nomes, int horasTrabalhada, double salarioHoras)
    {
        nome = nomes;
        horaTrabalhada = horasTrabalhada;
        salarioHora = salarioHoras;

    }

    public void setnome( String nomes )
    {
        nome = nomes;
    }

    public String getnome()
    {
        return nome;
    }

    public void sethoraTrabalhada( int horasTrabalhada )
    {
        horaTrabalhada = horasTrabalhada;    
    }

    public int gethoraTrabalhada()
    {
        return horaTrabalhada;
    }

    public void setsalarioHora( double salarioHoras )
    {
        salarioHora = salarioHoras;    
    }

    public double getsalarioHora()
    {
        return salarioHora;
    }

    public double getSalarioFinal()
    {
        if ( this.gethoraTrabalhada() <= 40 )
            salarioFinal = (double) this.gethoraTrabalhada() * this.getsalarioHora();
        else
            salarioFinal = (double) ((this.gethoraTrabalhada() - 40) * (this.getsalarioHora() * 1.5));

        return salarioFinal;
    }

}

Classe CalculaSalario


import java.util.Scanner;

public class CalculaSalario
{
    public static void main( String[] args )
    {
        Scanner input = new Scanner(System.in);    

        System.out.print("Digite o nome do empregado1: " );
        String empregado1Nome = input.next();

        System.out.print("Digite a quatidade de horas trabalhadas do empregado1 : ");
        int empregado1Horas = input.nextInt();

        System.out.print("Digite o salario do empregado1: " );
        double empregado1Salario = input.nextDouble();

        System.out.print("Digite o nome do empregado2: " );
        String empregado2Nome = input.next();

        System.out.print("Digite a quatidade de horas trabalhadas do empregado2 : ");
        int empregado2Horas = input.nextInt();

        System.out.print("Digite o salario do empregado2: " );
        double empregado2Salario = input.nextDouble();

        System.out.print("Digite o nome do empregado3: " );
        String empregado3Nome = input.next();

        System.out.print("Digite a quatidade de horas trabalhadas do empregado3 : ");
        int empregado3Horas = input.nextInt();

        System.out.print("Digite o salario do empregado3: " );
        double empregado3Salario = input.nextDouble();

        Empregado empregado1 = new Empregado(empregado1Nome, empregado1Horas, empregado1Salario);
        Empregado empregado2 = new Empregado(empregado2Nome, empregado2Horas, empregado2Salario);
        Empregado empregado3 = new Empregado(empregado3Nome, empregado3Horas, empregado3Salario);

        System.out.printf("Nome: %s\nQuantidade de horas trabalhadas: %d\nSalario-Hora: %.2f\nSalario Total: %.2f\n", empregado1.getnome(), empregado1.gethoraTrabalhada(), empregado1.getsalarioHora(), empregado1.getSalarioFinal());
        System.out.printf("Nome: %s\nQuantidade de horas trabalhadas: %d\nSalario-Hora: %.2f\nSalario Total: %.2f\n", empregado2.getnome(), empregado2.gethoraTrabalhada(), empregado2.getsalarioHora(), empregado2.getSalarioFinal());
        System.out.printf("Nome: %s\nQuantidade de horas trabalhadas: %d\nSalario-Hora: %.2f\nSalario Total: %.2f\n", empregado3.getnome(), empregado3.gethoraTrabalhada(), empregado3.getsalarioHora(), empregado3.getSalarioFinal());

    }
}

Saida:

Digite o nome do empregado1: Marcos
Digite a quatidade de horas trabalhadas do empregado1 : 60
Digite o salario do empregado1: 30
Digite o nome do empregado2: Oswaldo
Digite a quatidade de horas trabalhadas do empregado2 : 40
Digite o salario do empregado2: 40
Digite o nome do empregado3: Michelangelo
Digite a quatidade de horas trabalhadas do empregado3 : 30
Digite o salario do empregado3: 20
Nome: Marcos
Quantidade de horas trabalhadas: 60
Salario-Hora: 30,00
Salario Total: 900,00
Nome: Oswaldo
Quantidade de horas trabalhadas: 40
Salario-Hora: 40,00
Salario Total: 1600,00
Nome: Michelangelo
Quantidade de horas trabalhadas: 30
Salario-Hora: 20,00
Salario Total: 600,00

Abraços

@vinicius

Obrigado por ter me ajudado.

Comparando o código que você fez com o meu, gostaria de fazer algumas perguntas.

Com o trecho do código:

import java.util.Scanner;

public class calcula_salario
{
    public static void main( String[] args )
    {
        Scanner input = new Scanner(System.in);    

        Empregado empregado1 = new Empregado(empregado1.getnome(), empregado1.gethoraTrabalhada(), empregado1.getsalarioHora(), empregado1.getsalarioFinal());
        Empregado empregado2 = new Empregado(empregado2.getnome(), empregado2.gethoraTrabalhada(), empregado2.getsalarioHora(), empregado1.getsalarioFinal());
        Empregado empregado3 = new Empregado(empregado3.getnome(), empregado3.gethoraTrabalhada(), empregado3.getsalarioHora(), empregado1.getsalarioFinal());

Pelo que eu entendi, para passar um objeto criado na classe principal para o construtor da classe Empregado,. Ao executa-lo conforme acima, achei que estaria fazendo o processo com captura do que fosse digitado pelo teclado, por isso pensei em colocar os argumentos em cada objeto com o get. Por que não funciona desta forma?

No trecho

  public double getSalarioFinal()
    {
        if ( this.gethoraTrabalhada() <= 40 )
            salarioFinal = (double) this.gethoraTrabalhada() * this.getsalarioHora();
        else
            salarioFinal = (double) ((this.gethoraTrabalhada() - 40) * (this.getsalarioHora() * 1.5));

        return salarioFinal;
    }

Por que os cálculos foram efetuados na função getSalario ao invés da função que havia em meu código de set

Achava que na função get só efetuava o processo de retornar valores

Grato pela atenção

Vamos lá,

Empregado empregado1 = new Empregado(empregado1.getnome(), empregado1.gethoraTrabalhada(), empregado1.getsalarioHora(), empregado1.getsalarioFinal());

No trecho de código acima estamos criando o objeto empregado1. O construtor da classe espera valores para criar esse objeto, porém você está tentando usar métodos do objeto que ainda está sendo criado, o objeto nem tem esses métodos ainda, e esses métodos não criam nomes, eles só nos devolvem os que já foram criados. Realmente não faz sentido.

Além disso o método getsalarioFinalé calculado com base nas propriedades do empregado, portanto não faz sentido incluir essa informação no construtor.

O correto seria:

Empregado empregado1 = new Empregado("Carlos", 160, 40);

Agora quanto a este trecho de código:

 public double getSalarioFinal()
    {
        if ( this.gethoraTrabalhada() <= 40 )
            salarioFinal = (double) this.gethoraTrabalhada() * this.getsalarioHora();
        else
            salarioFinal = (double) ((this.gethoraTrabalhada() - 40) * (this.getsalarioHora() * 1.5));

        return salarioFinal;
    }

Não é necessário criar getters e setters para todas as propriedades. A única responsabilidade do getSalarioFinal é fazer um cálculo e nos devolver um resultado, portanto não há necessidade de um set, já que ele não armazena nenhum valor.

Recomendo dar uma olhada no curso de Java parte 2 que cobrem esses conceitos de orientação a objeto, como criação de objetos, construtores e getters e setters.

Obrigado novamente.

Bom... Eu estava tentando praticar sem ver os vídeos, pois estou estudando pelo livro como programar em Java 8º edição.

Vou seguir a sua recomendação sobre o curso. Quem sabem em vídeo eu consiga assimilar melhor sobre esses conceitos.

Abraços.

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