Erro Cannot find variable e1

5 respostas
W

Boa noite Pessoa!

sou novo aqui no forum, e mais novo ainda em java, estou tentando fazer um programinha pra aquecer, so q não estou conseguindo fazer realmente o q eu quero. dps de procurar algumas horas e testar várias combinações tentando descobrir o q está errado resolvi postar os códigos aqui no forum, espero q alguem me indique um caminho.

o erro q da é na classe Principal cannot find variable e1
public class Empregado {
    private String nome;
    private int numeroHoras;
    private double salarioH;
    private double salBruto;
    // Construtor inicializa a string nome com vazio, numerohoras com 0 e salarioh com 0.
    public Empregado (){
    nome="";
    numeroHoras= 0;
    salarioH=0;	
    }
    /* metodo setEmpregado( como as variaveis estão como private, temos que criar
    metodo set para poder atribuir valores à variaveis*/
    public void setEmpregado(String nomei, int numHoras, double salHora){
    	nome= nomei;
    	numeroHoras= numHoras;
    	salarioH=salHora;
    }
    //metodo getEmpregado para as variaveis poder ser exibida na classe principal.
    public String getEmpregado(){
 		return nome;
    }
    public double getSalBruto(){
 		return salBruto;
    }
    /* metodo calcula hora extra com adicional de 50% e devolve o salário bruto do empregado
    aqui o metodo não recebe nada. por que? simples pois ele usa as mesmas variáveis que
    o usuário atribui valores a ela dentro da main. quando eu chamo e1.calcSalBruto, ele
    vai me retornar o calculo do lario bruto para o objeto e1.*/
    public double calcSalBruto (){
    	
    	if(numeroHoras-40<=0)
    		return numeroHoras*salarioH;
    		
    		return salBruto = ((numeroHoras-40)*salarioH)*1.5+(40*salarioH);
    
    }
  
 }
CLASS PRINCIPAL.
import java.util.Scanner;
public class Principal {
    
    public static void main(String[] args) {
    	for(int i=0; i<3; i++){
    	
      	Empregado[] e1 = new Empregado[3];
      					
    	}  
    	Scanner in = new Scanner(System.in);
    	
    	for (int i=0;i<3;i++){
    		
    		e1[i]= new Empregado();
    		System.out.println("Digite o Nome do empregado, seguido do numero de horas trabalhadas\ne quanto ele ganha por hora:");
    		String n = in.nextLine();
    		int ht = in.nextInt();
    		double vh = in.nextDouble();


    		e1[i].setEmpregado(n,ht,vh);
    		e1[i].calcSalBruto();
    		System.out.print("O nome do Empregado é: "+e1[i].getEmpregado()+"\nO Salario bruto é:"+e1[i].getSalBruto());
 	
    	}
    }
}

Toda crítica e conselhos são bem vindos!!!

Obrigado antecipadamente.

5 Respostas

felipemartinsss
for(int i=0; i<3; i++){  
           
         Empregado[] e1 = new Empregado[3];  
                           
         }

Não olhei o resto do código, mas esse trecho no início da classe Principal, método main(), está estranho.
Se sua idéia é criar um array, deveria tentar

Empregado[] e1 = new Empregado[3];

Mas tudo isso fora de um for
Já que esse for está substituindo os valor de e1 e quando o for estiver encerrado e1 deixará de existir já que foi declarado internamente a ele.

No for seguinte, quando vc tentar a atribuição abaixo

e1[i]= new Empregado();

e1 não estará mais na memória e daí a msg… cannot find symbol.
Não sei por onde está estudando, mas acho que deveria fixar melhor os conceitos anteriores.

V

Cara tb não sei muita coisa, mas acho que se você retirar a eliminar o 1º for e deixar só Empregado[] e1 = new Empregado[3]; , vai dar certo, acho que do jeito que esta sendo feito, o array Empregado só existe dentro do for.

W

Obrigado a vcs, mas só pra esclarecer o primeiro for não era pra está ali de tanto tentar tirar o erro, esqueci ele ali mas a minha idéia era a seguinte:

import java.util.Scanner;
public class Principal {
    
    public static void main(String[] args) {
    	
    	
      	Empregado[] e1 = new Empregado[3];
            
      					
     
    	Scanner in = new Scanner(System.in);
    	
    	for (int i=0;i<3;i++){
    		
    		e1[i] = new Empregado();
    		
    		System.out.println("Digite o Nome do empregado, seguido do numero de horas trabalhadas\ne quanto ele ganha por hora:");
    		String n = in.nextLine();
    		int ht = in.nextInt();
    		double vh = in.nextDouble();
    		  
    		

    		e1[i].setEmpregado(n,ht,vh);
    		e1[i].calcSalBruto();
    		    	
    	
    	}
    	System.out.print("O nome do Empregado é: "+e1[i].getEmpregado()+"\nO Salario bruto é:"+e1[i].getSalBruto());

    		
    	
    }
}

Dúvida principal é se eu posso usar esse tipo de sintaxe?
System.out.print("O nome do Empregado é: "+e1[i].getEmpregado()+"\nO Salario bruto é:"+e1[i].getSalBruto());

thx

felipemartinsss

Pode sim.

Mas está utilizando o nome getEmpregado() para algo que na verdade retorna o nome do empregado.
Deveria alterar para getNome() o nome desse método.
Quando utiliza o nome getEmpregado da a impressão que vc está devolvendo um Empregado, uma instância da classe.

W

Vlw pela ajuda!!!

Muito obrigado!

Criado 15 de março de 2008
Ultima resposta 15 de mar. de 2008
Respostas 5
Participantes 3