Exercicio apostila

7 respostas
C

Bom pessoal sou iniciante em java e estou fazendo um exercicío de uma apostila da caelum,mais to fazendo algo errado,pois está trazendo os valores como se tivesse null.
exercicio-
Em vez de utilizar uma String para representar a data, crie uma outra
classe, chamada Data. Ela possui 3 campos int, para dia, mês e ano. Faça com que seu
funcionário passe a usála.

então crie uma classe data.

package Banco;


public class Data {
  
  public	int dia;
  public	int mes;
  public	int ano;
		
  }

define os valores das variaveis na clase.

package Banco;

public class Testefuncionario {

	public static void main(String[] args) {
	 Funcionario func;
	 func = new Funcionario ();
	 func.funcionario = "zebedeu";
	 
	 Data dataDeEntrada = new Data ();
	 
	 dataDeEntrada.dia = 10;
	  dataDeEntrada.mes = 01;
	 dataDeEntrada.ano = 2008;
	 
	 func.salariobase = (1000);
	
	 func.demite("S");
	 
	 func.mostra();
	 
	 }
}

para jogar na tela tenho um metodo o metodo mostra que ta em outra classe.

package Banco;

public class Funcionario {

	String funcionario;
	String departamento;
	double salariobase;
	String dataentrada; 
	String rg;
	boolean on_empresa;
	boolean bonifica;
	boolean naobonifica;
	double  admissao;
	

			
	 
	 Data dataDeEntrada = new Data ();
	
		void valor (double salario) {
                       salariobase += salario + salariobase; 
		
		}
        
		
		
		void bonifica(double valoraumemto) {
	               if (this.admissao >= 3) {
	     	          salariobase = valoraumemto + salariobase;
		   } else {
			  valoraumemto = 0;
		}

		}
		        

		void demite(String demitir) {
	                if (demitir  == "s" ) {
	     	              System.out.print("funcionario foi demitido ");
			
		} else {
			System.out.print("Funcionario no quado de trabalhadores da empresa ");
		
		
        } 	
		}
		  void mostra(){
		 
			System.out.println("Nome: " + this.funcionario);
		  	System.out.print(" salario: " + this.salariobase);
		  	System.out.print("Tempo empresa: " + this.admissao);
		  	System.out.println("Dia: " + this.dataDeEntrada.dia);
		  	System.out.println("Mês: " + this.dataDeEntrada.mes);
		  	System.out.println("Ano: " + this.dataDeEntrada.ano);
		  
		  	
		  
		  }
		
}

mais ele não traz os valores que define anteriormenta da data, os outros valores do metodo mostra ele joga corretamente.
Gostaria saber se alguém pode me ajudar?

7 Respostas

renatoes

Bom dia cleber_zeh,

Por favor, poste seu código entre as tags que são disponíveis na hora do post para torná-lo mais legível. O Mantu explica como neste post:
http://www.guj.com.br/posts/list/50115.java
:wink:

C

Ops,desculpe não tinha notado.
já coloquei as tags.

renatoes

Boa tarde cleber_zeh,

Os valores do objeto Data instanciado dentro da classe Funcionário não são setados (você apenas instanciou o objeto). Ao instanciar um novo objeto Data na função main, você está modificando um objeto fora do escopo do objeto Funcionário, não dentro.
Para ficar mais claro, o que você deve fazer é:

package Banco;

public class Funcionario {

	String funcionario;
	String departamento;
	double salariobase;
	String dataentrada; 
	String rg;
	boolean on_empresa;
	boolean bonifica;
	boolean naobonifica;
	double  admissao;
	

			
	 
	 Data dataDeEntrada = new Data ();

        /*
         * Aqui você configura os valores da data para um objeto Funcionário, mas não faz muito sentido, pois todos os funcionários teriam a mesma data de entrada.
         */
	 dataDeEntrada.dia = 10;
         dataDeEntrada.mes = 01;
         dataDeEntrada.ano = 2008;

		void valor (double salario) {
                       salariobase += salario + salariobase; 
		
		}
        
		
		
		void bonifica(double valoraumemto) {
	               if (this.admissao >= 3) {
	     	          salariobase = valoraumemto + salariobase;
		   } else {
			  valoraumemto = 0;
		}

		}
		        

		void demite(String demitir) {
	                if (demitir  == "s" ) {
	     	              System.out.print("funcionario foi demitido ");
			
		} else {
			System.out.print("Funcionario no quado de trabalhadores da empresa ");
		
		
        } 	
		}
		  void mostra(){
		 
			System.out.println("Nome: " + this.funcionario);
		  	System.out.print(" salario: " + this.salariobase);
		  	System.out.print("Tempo empresa: " + this.admissao);
		  	System.out.println("Dia: " + this.dataDeEntrada.dia);
		  	System.out.println("Mês: " + this.dataDeEntrada.mes);
		  	System.out.println("Ano: " + this.dataDeEntrada.ano);
		  
		  	
		  
		  }
		
}

Não sei se é o enfoque do exercício, mas pesquise um pouco mais sobre orientação a objetos e métodos setters (configuram atributos e/ou outros objetos que compõem um objeto) e getters (recuperam estes atributos).

[]'s

peczenyj

Demitir recebe uma String ?

Acho que estas classes devem ser refatoradas para testes unitários. Use o eclipse integrado com o EMMA e Junit e tente obter 100% do codigo testado através de classes simples.

E troque o mostra por um toString()

C

iaii
renatoes

dataDeEntrada.dia = 10;

dataDeEntrada.mes = 01;

dataDeEntrada.ano = 2008;

não funcionou como você falou.Fico a mesma coisa.

 funciona se eu defeni as variaveis dia,Mês,ano na classe

funcionarios.

e os valores no caso
dataDeEntrada.dia = 10;

dataDeEntrada.mes = 01;

dataDeEntrada.ano = 2008;

tem que ficar na classe testefuncionario.

por que ocorre isso eu não posso no java define umas variaveis numa classe
e depois define os valores dela em outra,
e criar um metodo para elas em outra classe?

N

cleber_zeh,

Tente assim:

public class Data {   
     
  public    int dia;   
  public    int mes;   
  public    int ano;   
           
}
public class Funcionario {   
  
    String funcionario;   
    String departamento;   
    double salariobase;   
    String rg;   
    Data dataDeEntrada= new Data();
    boolean on_empresa;   
    boolean bonifica;   
    boolean naobonifica;   
    double  admissao; 
       
        void valor (double salario) {   
                       salariobase += salario + salariobase;   
           
        }   
           
           
           
        void bonifica(double valoraumemto) {   
                   if (this.admissao >= 3) {   
                      salariobase = valoraumemto + salariobase;   
           } else {   
              valoraumemto = 0;   
        }   
  
        }   
                   
  
        void demite(String demitir) {   
                    if (demitir  == "s" ) {   
                          System.out.print("funcionario foi demitido ");   
               
        } else {   
            System.out.print("Funcionario no quado de trabalhadores da empresa ");   
           
           
        }     
        }   
          void mostra(){   
           
            System.out.println("Nome: " + this.funcionario);   
            System.out.print(" salario: " + this.salariobase);   
            System.out.print("Tempo empresa: " + this.admissao);   
            System.out.println("Dia: " + this.dataDeEntrada.dia);   
            System.out.println("Mês: " + this.dataDeEntrada.mes);   
            System.out.println("Ano: " + this.dataDeEntrada.ano);   
             
               
             
          }   
           
}
public class Testefuncionario 
{
 public static void main(String[] args) 
 {
     Funcionario func; func = new Funcionario (); 
     func.funcionario = "zebedeu"; 
     func.dataDeEntrada.dia = 10; 
     func.dataDeEntrada.mes = 01;  
     func.dataDeEntrada.ano = 2008; 
     func.salariobase = (1000); 
     func.demite("S"); 
     func.mostra(); 
  }
}
C

Obrigado nilson agora sim,funcionou.

Mais sabe me explicar por que tem que ser assim?

Criado 4 de fevereiro de 2008
Ultima resposta 11 de fev. de 2008
Respostas 7
Participantes 4