[RESOLVIDO]Retorno não funciona

13 respostas
luis_serra

Fala galera do GUJ blzera?
o que acontece é que encapsulei (acredito que certo) e criei os métodos para conseguir escrever nos atributos.
Mais no retorno os valores vem todos como zero, ou seja, pelo o que eu vi não consigo pegar o que tem naqueles atributos, o sistema é pra cadastrar um Celetista ou Pessoa Jurídica.
os códigos são esses.
Desculpe se fiz muita coisa e era mais simples que isso. eu tenho ainda que cadastrar os nomes, mais isso não é complicado, quero só conseguir fazer essas partes retornarem os valores corretos.

Obs: Pra quem quiser entender o Exercício, ele está em Anexo, obrigado desde já. Eu também não consegui usar o Construtor para inicializar os dados.l

package Colaboradores;
public class Principal {
   public static void main(String[] args){
       Menu menu=new Menu();
       menu.Menu1();
    } 
}
package Colaboradores;

import java.util.Scanner;

public class Menu {

    public void Menu1() {
        Scanner in = new Scanner(System.in);//Instanciar o Scanner para ler os dados
        String opcao;
        int escolha1 = 3;
        int escolha2 = 3;
        while ((escolha1 != 0) && (escolha1 != 1) && (escolha1 != 2)) {//Retornar ao Menu
            //****************************MENU**************************
            System.out.println("Escolha uma das seguintes Opções");
            System.out.println("1 - Celetista");
            System.out.println("2 - Pessoa Jurídica");
            System.out.println("0 - Sair");
            System.out.println("\n");
            //************************Fim do MENU***********************

            opcao = in.nextLine();//Ler opção do Menu
            escolha1 = Integer.parseInt(opcao);//Converter opção do Menu

            /*-------------------------------------------------------
             *------------------OPÇÂO CELETISTA---------------------- 
             *-----------------------------------------------------*/


            if (escolha1 == 1) {//CELETISTA
                do {
                    Celetista cel = new Celetista();
                    //****************MENU*************
                    System.out.println("\nEscolha uma das seguintes Opções - ---CELETISTA---");
                    System.out.println("1 - Alterar o valor do pagamento");
                    System.out.println("2 - Calcular pagamento");
                    System.out.println("0 - Sair");
                    //***********FIM DO MENU***********

                    opcao = in.nextLine();//Ler Opção do Menu
                    escolha2 = Integer.parseInt(opcao);//Converter Opção do Menu


                    if (escolha2 == 1) {//Alterar o valor Mensal - CELETISTA
                        System.out.println("Alterar Valor Mensal");
                        String valor1;
                        double valor = 0;
                        System.out.print("Digite o valor para alterar: ");
                        valor1 = in.nextLine();//Ler o valor para alterar
                        valor = Double.parseDouble(valor1);//Converter o valor para alterar
                        cel.alterarSalarioMensal(valor);//chama método para alterar o salário
                        escolha2 = 5;//retorna para o MENU ANTERIOR
                    }//if Alterar valor
                    else if (escolha2 == 2) {//Calcular pagamento - CELETISTA
                        String valorS;
                        double valor;
                        double liquido;

                        System.out.println("Qual o número de horas trabalhadas? ");
                        valorS = in.nextLine();//Ler o valor de horas trabalhadas
                        valor = Double.parseDouble(valorS);//converte o valor
                        liquido = (valorBrutoCeletista(valor) - cel.INSS() - cel.IRRF());//Pega o salário Líquido do Celetista

                        System.out.println("O salário Mensal é: " + cel.salarioMensal());//Mostra o Salário Mensal
                        System.out.println("O Valor Bruto é: " + valorBrutoCeletista(valor));//Mostra o Salário Bruto
                        System.out.println("O Valor do imposto IRRF é: " + cel.IRRF());//Mostra o Imposto IRRF
                        System.out.println("O Valor do imposto INSS é: " + cel.INSS());//Mostra o Imposto INSS
                        System.out.println("O Valor do Líquido é: " + liquido);//Mostra o Salário Líquido
                        escolha2 = 5;//volta para o Menu Anterior
                    }//if Calcular pagamento
                    else if (escolha2 == 0) {//Opção Sair
                        System.out.println("Opção 0");
                    }//if Sair
                    else if ((escolha2 != 2) && (escolha2 != 1) && (escolha2 != 0) && (escolha2 != 5)) {//Opção Inválida
                        System.out.println("Opção Inválida, favor escolher uma das opções!\n\n\n\n\n\n\n");
                    }//if Opção Inválida
                } while ((escolha1 != 0) && (escolha1 != 1) && (escolha1 != 2));//retorna para o Menu
            }//Fim do Celetista

            /*-------------------------------------------------------
             *----------------FIM OPÇÃO CELETISTA--------------------
             *-----------------------------------------------------*/



            /*-------------------------------------------------------
             *---------------OPÇÂO Pessoa Jurídica------------------- 
             *-----------------------------------------------------*/

            if (escolha1 == 2) {//Pessoa Jurídica
                do {
                    PessoaJuridica pj = new PessoaJuridica();//Instanciação
                    //****************MENU*************
                    System.out.println("\nEscolha uma das seguintes Opções - ---PJ---");
                    System.out.println("1 - Alterar o valor do pagamento");
                    System.out.println("2 - Calcular pagamento");
                    System.out.println("0 - Sair");
                    //***********FIM DO MENU***********

                    opcao = in.nextLine();//Ler Opção do Menu
                    escolha2 = Integer.parseInt(opcao);//Converter Opção do Menu


                    if (escolha2 == 1) {//Alterar o valor das Horas - PJ
                        System.out.println("Alterar Valor das horas");
                        String valor1;
                        double valor = 0;
                        System.out.print("Digite o valor para alterar: ");
                        valor1 = in.nextLine();//Ler o valor da hora
                        valor = Double.parseDouble(valor1);//converter o valor da hora
                        pj.alterarValorHora(valor);//chama o método que altera o valor da hora
                        escolha2 = 5;//retorna para o Menu anterior
                    }//if Alterar valor
                    else if (escolha2 == 2) {//Calcular pagamento - PJ
                        String valorS;
                        double valor;
                        double liquido;

                        System.out.println("Qual o número de horas trabalhadas? ");
                        valorS = in.nextLine();//Ler o valor de horas trabalhadas
                        valor = Double.parseDouble(valorS);//converte o valor
                        liquido = (valorBrutoPJ(valor) - pj.ISS() - pj.IRRF() - pj.PIS());//Pega o salário Líquido do Celetista

                        System.out.println("O Valor Bruto é: " + valorBrutoPJ(valor));//Mostra o Salário Bruto
                        System.out.println("O Valor do imposto IRRF é: " + pj.IRRF());//Mostra o Imposto IRRF
                        System.out.println("O Valor do imposto INSS é: " + pj.ISS());//Mostra o Imposto ISS
                        System.out.println("O Valor do imposto PIS é: " + pj.PIS());//Mostra o Imposto PIS
                        System.out.println("O Valor do Líquido é: " + liquido);//Mostra o Salário Líquido
                        escolha2 = 5;//volta para o Menu Anterior
                    }//if Calcular pagamento
                    else if (escolha2 == 0) {//Opção Sair
                        System.out.println("Opção 0");
                    }//if Sair
                    else if ((escolha2 != 2) && (escolha2 != 1) && (escolha2 != 0) && (escolha2 != 5)) {//Opção Inválida
                        System.out.println("Opção Inválida, favor escolher uma das opções!\n\n\n\n\n\n\n");
                    }//if Opção Inválida
                } while ((escolha2 != 0) && (escolha2 != 1) && (escolha2 != 2));//retorna para o Menu
            }//Fim do PJ
        }
    }

    public double valorBrutoCeletista(double valor) {

        Colaborador col = new Colaborador();
        Celetista cel = new Celetista();
        double salario = 0;
        double salarioHora;
        if (col.mostraHorasMensal(valor) <= 160) {
            salario = cel.salarioMensal();
        }
        if (col.mostraHorasMensal(valor) >= 161) {
            salarioHora = cel.salarioMensal() / 160;
            salario = salarioHora * cel.salarioMensal();
        }

        return salario;
    }

    public double valorBrutoPJ(double valor) {
        Colaborador col = new Colaborador();
        PessoaJuridica pj = new PessoaJuridica();
        double salario = 0;
        salario = pj.mostraValorHora() * col.mostraHorasMensal(valor);
        return salario;
    }
}
package Colaboradores;

import java.util.Scanner;

public class Colaborador {

    private String nome;
    private String endereco;
    private String telefone;
    private double horasTrabalhadas;

    public Colaborador() {
    }

    public void incluir() {
        Scanner in = new Scanner(System.in);
        String horas;
        System.out.print("Digite o Nome: ");
        this.nome = in.nextLine();
        System.out.print("Digite o Endereço: ");
        this.endereco = in.nextLine();
        System.out.print("Digite o Telefone: ");
        this.telefone = in.nextLine();
        System.out.print("Digite a quantidade de horas trabalhadas no Mês:  ");
        horas = in.nextLine();
        this.horasTrabalhadas = Double.parseDouble(horas);
    }

    public void imprimir() {
        System.out.println(this.nome);
        System.out.println(this.endereco);
        System.out.println(this.telefone);
        System.out.println(this.horasTrabalhadas);
    }

    public double mostraHorasMensal(double horasTrabalhadas) {
        this.horasTrabalhadas = horasTrabalhadas;
        return this.horasTrabalhadas;
    }
}
package Colaboradores;
import java.util.Scanner;

public class Celetista extends Colaborador{
  private String RG;
  private String CPF;
  private double salarioMensal;

    public Celetista(){
       
    }
    
  public void incluirCeletista(){
      Scanner in=new Scanner(System.in);
      String salario;
        System.out.print("Digite o RG: ");
        this.RG=in.nextLine();
        System.out.print("Digite o CPF: ");
        this.CPF=in.nextLine();
        System.out.print("Digite o Salário Mensal: ");
        salario=in.nextLine();
        this.salarioMensal=Double.parseDouble(salario);
    }
 
  public void imprimirCeletista(){
        System.out.println(this.RG);
        System.out.println(this.CPF);
        System.out.println(this.salarioMensal);
    }

    public double IRRF(){
       double impostoIRRF=0;
        if(this.salarioMensal<1499.15){
            impostoIRRF=0;
        }
        else if((this.salarioMensal>=1499.16)&&(this.salarioMensal<=2246.75)){
            impostoIRRF=((this.salarioMensal/100)*7.5)-112.43;
        }
        else if((this.salarioMensal>=2246.76)&&(this.salarioMensal<=2995.70)){
            impostoIRRF=((this.salarioMensal/100)*15)-280.94;
        }
        else if((this.salarioMensal>=2995.71)&&(this.salarioMensal<=3743.19)){
            impostoIRRF=((this.salarioMensal/100)*22.5)-502.72;
        }
        else{
            impostoIRRF=((this.salarioMensal/100)*27.5)-692.78;
        }
       return impostoIRRF;
   }
   
    public double INSS(){
       double imposto=0;
        if(this.salarioMensal<=965.67){
            imposto=(this.salarioMensal/100)*8;
        }
        else if((this.salarioMensal<=965.68)&&(this.salarioMensal<=1609.45)){
            imposto=(this.salarioMensal/100)*9;
        }
        else{
            imposto=(this.salarioMensal/100)*11;
            if(imposto>354.08){
                imposto=354.08;
            }
        }
        return imposto;
   }
   
    public void alterarSalarioMensal(double valor) {
        this.salarioMensal = valor;
    }
   
    public double salarioMensal(){
       return this.salarioMensal;
   }
}
package Colaboradores;

import java.util.Scanner;

public class PessoaJuridica extends Colaborador {

    private String CNPJ;
    private double valorHora;
    private double valorBruto;

    public void incluirPJ() {
        Scanner in = new Scanner(System.in);
        String hora;

        System.out.print("Digite o CNPJ: ");
        this.CNPJ = in.nextLine();
        System.out.print("Digite o Valor por Hora: ");
        hora = in.nextLine();
        this.valorHora = Double.parseDouble(hora);
    }

    public void imprimirPJ() {
        System.out.println(this.CNPJ);
        System.out.println(this.valorHora);
    }

    
    public double IRRF() {
        double imposto = 0;
        imposto = (this.valorBruto / 100) * 1.5;
        return imposto;
    }

    public double PIS() {
        double imposto = 0;
        if (this.valorBruto > 5000) {
            imposto = (this.valorBruto / 100) * 4.65;
        }
        return imposto;
    }

    public double ISS() {
        double imposto = 0;
        if (this.valorBruto > 5000) {
            imposto = (this.valorBruto / 100) * 4;
        }
        return imposto;
    }
    
    public void alterarValorHora(double valor){
        this.valorHora=valor;
    }
    public double mostraValorHora(){
        return this.valorHora;
    }

}

13 Respostas

Jonhkr

Qual dos returns esta com problema???

luis_serra

na vdd são todos, ele retorna, mais manda o valor 0.0

Jonhkr

cara ta uma confusao, em pessoa juridica tu ta retornando o valorBruto que nem foi instanciado ou seja eh null

pq voce nao usa os methods nextInt() para inteiro, nextDouble para ponto flutuante ao invez de nextLine()

Jonhkr

Jonhkr:
cara ta uma confusao, em pessoa juridica tu ta retornando o valorBruto que nem foi instanciado ou seja eh null

pq voce nao usa os methods nextInt() para inteiro, nextDouble para ponto flutuante ao invez de nextLine()

outra coisa use os setter and getters para os parametros fica mais bonito :slight_smile:

ViniGodoy

Por que é errado usar esses métodos.

Toda entrada do console termina com o caracter de quebra de linha. Esses métodos deixam esse caracter no buffer. É isso que faz com que eles inexplicavelmente não funcionem de vez enquando. Para ler do console, o único método 100% confiável é mesmo o nextLine().

ViniGodoy

Cuidado que essa linha está dentro do while:

Celetista cel = new Celetista();

Isso significa que a cada loop, sua variável ce1 será apagada e substituída por um novo celetista.
Verifique se é isso mesmo que você quer fazer (provavelmente não, você deveria colocar essa linha antes do do, não depois).

luis_serra

ViniGodoy:
Cuidado que essa linha está dentro do while:

Celetista cel = new Celetista();

Isso significa que a cada loop, sua variável ce1 será apagada e substituída por um novo celetista.
Verifique se é isso mesmo que você quer fazer (provavelmente não, você deveria colocar essa linha antes do do, não depois).

mais isso não faria diferença eu acredito, (Testei aqui e não funcionou) mais realmente é pra criar ele assim que entrar na opção, já corrigi este problema.
o único problema é esses retornos que me voltam sempre 0.0

o método que to usando nextLine() e depois convertendo acredito que esteja correto pois não da erro nenhum na hora da compilação.
tah complicado olhei várias vezes, lembrando galera so novo em JAVA começei faz uns 3 meses. Desculpe a bagunça kkk Até eu me perco no código que fiz, acredito que irei melhorar com o tempo.

Jonhkr

Por que é errado usar esses métodos.

Toda entrada do console termina com o caracter de quebra de linha. Esses métodos deixam esse caracter no buffer. É isso que faz com que eles inexplicavelmente não funcionem de vez enquando. Para ler do console, o único método 100% confiável é mesmo o nextLine().

sim as vezes eles nao funcionam mas justamente por que o caracter \n esta no buffer

para que funcione corretamente basta chamar o nextLine() ai ele zera o buffer

ViniGodoy

Faria pq o new zeraria a variável. E você teria a impressão que o return não está funcionando, quando na verdade está.
Aliás, com certeza o return funciona. Isso é um recurso tão básico e elementar da linguagem, que não é ele o problema.

Já tentou rodar seu programa passo-a-passo?

luis_serra

Faria pq o new zeraria a variável. E você teria a impressão que o return não está funcionando, quando na verdade está.
Aliás, com certeza o return funciona. Isso é um recurso tão básico e elementar da linguagem, que não é ele o problema.

Já tentou rodar seu programa passo-a-passo?

Vini desculpa, mais ainda não aprendi a rodar passo-a-passo, iso se chama debugar? pois ainda não aprendi isso, aliás, consegui ter um retorno, apenas do celetista, o que mudei foi o seguinte, em cada parte do menu, tem um escolha2=5; isso é pra reternar ao menu anterior, aí coloquei ele no while lá em baixo, e também coloquei a instância em cima do do{ como você me disse e me retornou os resultados esperados, mas fiz a mesma coisa em PJ e não funcionou, deve ter algo errado aqui, estou analisando pra ver certinho o que possa estar errado, métodos e tudo mais.

Tem algum problema na hora do retorno eu usar o this. ?
Ex: return this.horasTrabalhadas;

pq estava lendo e em alguns lugares não tem o this

luis_serra

Galera eu consegui resolver o problema agora está retornando tudo certinho, o que havia de errado era a instanciação, obrigado vini, assim que mudei ela funcionou.
Outra coisa também, eu joguei os métodos brutos pra dentro de cada classe pra não ficar tudo em uma só, e também estava com problemas na instanciação do valor bruto, então criei um atributo com o nome valorBruto pra guardar esse valor, pra mas tarde eu poder retorná-lo. agora eu tenho que terminar ele. Aprendi muito fazendo isso, obrigado pela a ajuda a todos que tentaram me ajudar.

ViniGodoy

Rapaz, tá passando de hora de você aprender. Você usa o Netbeans ou o Eclipse? O depurador é a principal ferramenta de detecção de erros do programador. No estágio que você está, é uma boa aprender a usa-lo, pois você vai ver em detalhes como o Java funciona e onde estão os erros do seu código. Recomendo fortemente que você aprenda. Vai auxiliar muito nos seus estudos.

luis_serra:

Tem algum problema na hora do retorno eu usar o this. ?
Ex: return this.horasTrabalhadas;

pq estava lendo e em alguns lugares não tem o this

Não tem problema. Mas a recomendação da linguagem é, de maneira geral, evitar palavras desnecessárias. O this só é realmente necessário se há shadowing, ou seja, se sua função declara um parâmetro exatamente com o mesmo nome de um atributo de sua classe. Isso tipicamente ocorre em métodos setters e construtores:

public void setNome(String nome) { this.nome = nome; //O atributo "nome" da classe recebe o parâmetro "nome" da função }

luis_serra

Rapaz, tá passando de hora de você aprender. Você usa o Netbeans ou o Eclipse? O depurador é a principal ferramenta de detecção de erros do programador. No estágio que você está, é uma boa aprender a usa-lo, pois você vai ver em detalhes como o Java funciona e onde estão os erros do seu código. Recomendo fortemente que você aprenda. Vai auxiliar muito nos seus estudos.

luis_serra:

Tem algum problema na hora do retorno eu usar o this. ?
Ex: return this.horasTrabalhadas;

pq estava lendo e em alguns lugares não tem o this

Não tem problema. Mas a recomendação da linguagem é, de maneira geral, evitar palavras desnecessárias. O this só é realmente necessário se há shadowing, ou seja, se sua função declara um parâmetro exatamente com o mesmo nome de um atributo de sua classe. Isso tipicamente ocorre em métodos setters e construtores:

public void setNome(String nome) { this.nome = nome; //O atributo "nome" da classe recebe o parâmetro "nome" da função }

É, eu percebi isso, irei tentar ao máximo economizar palavras, e sobre o Debug irei ir atraz pra ver como funciona, eu já li um pouco, mais vo ir atraz pra aprender a fazer exatamente correto. Obrigado mais uma vez cara.

Criado 8 de outubro de 2011
Ultima resposta 9 de out. de 2011
Respostas 13
Participantes 3