Classe Data

19 respostas
liliansviana

estou com novas duvidas, pois o exercício tem continuaçõa e não estou conseguindo resolver a questão Data. Diz a questão desta forma:
*Crie uma classe chamada data que devera possuir 3 campos int e faça com que seu funcionário passe a usa-la.

CLASSE FUNCIONARIO

public class Funcionario {  
         
       String nome;  
       String matricula;  
       String depto;  
       String cargo;  
       double salario;  
       Data admissao;  
       String rg;  
       boolean sit;  
       double bonus;  
       double novoSalario;  
         
       class Admissao {  
           int dia;  
           int mes;  
           int ano;  
       }  
         
         void bonifica(double bonif){     
             double novoSalario = this.salario + bonif;     
             this.salario = novoSalario;   }   
           
        public boolean situacao(boolean sit){      
                if(sit==false){      
                    System.out.println("\nFUNCIONARIO DEMITIDO");      
                }else{      
                    System.out.println("\nFUNCIONARIO ATIVO");      
                }      
                return sit;      
                      
            }     
               
        void mostra() {     
            System.out.println("Nome: " + this.nome);    
            System.out.println("Matricula: " + this.matricula);  
            System.out.println("Data de Admissao: " + this.admissao);     
            System.out.println("Departamento: " + this.depto);    
            System.out.println("Cargo Ocupado: "+ this.cargo);  
            System.out.println("RG: " + this.rg);     
            System.out.println("Salario: " + this.salario);     
            System.out.println("Bonus: " + this.bonus);  
            System.out.println("Situação Funcional: " + this.sit);  
              
       }  
    }

CLASSE TESTAFUNCIONÁRIO

public class TestaFuncionario extends Funcionario{    
        
        public static void main (String Args[]){  
           Funcionario f1 = new Funcionario();  
           Data admissao = new Data();  
           f1.admissao = Data;  
             
            f1.nome = "Lilian Viana";    
            f1.matricula = "11111111";  
            f1.rg = "3353408";    
            f1.depto = "Informática";  
            f1.cargo = "Desenvolvedora de Software";  
            f1.admissao = "01/03/2011";  
            f1.salario = 4500.00;    
            f1.bonus = f1.salario * 0.5;                
            f1.novoSalario = f1.salario + f1.bonus;  
            f1.situacao(true);  
                   
            System.out.println(f1);    
            System.out.println("\nNome = " + f1.nome + "\nMatricula = " + f1.matricula + "\nRG = " + f1.rg + "\nDepartamento = " + f1.depto + "\n Cargo Ocupado = "+ f1.cargo + "\nSalario = R$" + f1.salario + "\nBonificação = R$" + f1.bonus + "\nData Admissão = "+f1.admissao);     
            System.out.println("Salário com Bonificação: R$"+f1.novoSalario);   
                 
            Funcionario f2 = new Funcionario();    
            f2.nome = "Maria Souza";  
            f2.matricula = "222222222";  
            f2.rg = "4455667";    
            f2.depto = "Administração";  
            f2.cargo = "Administradora";  
            f2.admissao = "30/03/2011";  
            f2.salario = 2800.00;    
            f2.bonus = (200);    
            f2.novoSalario = f2.salario+f2.bonus;    
            f2.situacao(false);  
              
            System.out.println(f2);    
            System.out.println("\nNome = " + f2.nome + "\nMatricula = " + f2.matricula + "\nRG = " + f2.rg + "\nDepartamento = "+ f2.depto + "\nCargo Ocupado = " + f2.cargo + "\nSalario = R$" + f2.salario + "\nBonificação = R$" +f2.bonus+ "\nData de Admissão = " +f2.admissao);    
            System.out.println("Salário com Bonificação: R$"+f2.novoSalario);  
          
        }  
             
        }

Gostaria da ajuda de vcs, se puderem… Obrigada!!!

19 Respostas

drsmachado

A questão diz apenas isto?
Esta classe deveria representar datas, cada um dos int dela representa uma parte da data (dia, mes e ano)?

liliansviana

Sim, diz apenas isto,

class Funcionario{
   Data dataDeAdmissao; // valor default???
  //Outros atributos
}

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

depois pede para modificar a classe TestaFuncionario, para que eu crie uma nova Data e atrubua lea ao Funcionário.

Funcionario f1 = new Funcionario();
// ...
Data dataDeAdmissao=new Data(); //ligação!
f1.dataDeAdmissao = data;

Com base nas informações só consegui desenvolver o q postei acima…
Não sei como realizar isso.

drsmachado

Então, você precisa criar, na classe data, os getters e setters e, sugiro, um construtor com os 3 parâmetros ao mesmo tempo

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

 public Data(int dia, int mes, int ano){
  this.dia = dia;
  this.mes = mes;
  this.ano = ano;
 }

 public void setDia(int dia){
  this.dia = dia;
 }

 public int getDia(){
  return dia;
 }
}

Assim, quando vc alterar a classe TestaFuncionario

...
 Data dataDeAdmissao = new Data(04, 05, 2011); //ligação!  
 f1.dataDeAdmissao = dataDeAdmissao;
liliansviana

Primeiramente, muito obrigada pela ajuda… mas, tem uma outra forma de fazer isso sem usar get e set, pois ainda não cheguei nessa parte?.. sou iniciante em JAVA!
Outra coisa a classe Data ficara dentro da Classe funcionário ou será preciso criar uma classe data em um outro pacote?
Desculpa por tantas Dúvidas!

drsmachado

Tem, mas vai contra as boas práticas de programação.
Use apenas o construtor.

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

 public Data(int dia. int mes, int ano){
  this.dia = dia;
  this.mes = mes;
  this.ano = ano;
 }
}
liliansviana

Muito obrigada pela ajuda… certo!!! sei q boas práticas devem começar desde cedo, mas vou chegar lá… sou iniciante em JAVA!
Outra coisa a classe Data ficara dentro da Classe funcionário ou será preciso criar uma classe data em um outro pacote?
Desculpa por tantas Dúvidas!

liliansviana

Gente, gostaria de saber como faço para que o funcionário entre com a data (dia, mes e ano) e q isso seja impresso depois!

CLASSE FUNCIONARIO

public class Funcionario
...
Data dataDeAdmissao
...
 
 public class Data{  
    int dia;  
    int mes;  
    int ano;  
      
    public Data(int dia, int mes, int ano){  
      this.dia = dia;  
      this.mes = mes;  
      this.ano = ano;  
    }  
    }  
}

CLASSE TESTE

public class TestaFuncionario extends Funcionario{  
  
    public static void main (String Args[]){
       Funcionario f1 = new Funcionario();  

        f1.nome = "Lilian Viana"; 
        f1.matricula = "11111111";
        f1.rg = "3353408";  
        f1.depto = "Informática";
        f1.cargo = "Desenvolvedora de Software";
        f1.salario = 4500.00;  
        f1.bonus = f1.salario * 0.5;              
        f1.novoSalario = f1.salario + f1.bonus;
        f1.situacao(true);
        System.out.println(f1);  
        System.out.println("\nNome = " + f1.nome + "\nMatricula = " + f1.matricula + "\nRG = " + f1.rg + "\nDepartamento = " + f1.depto + "\nCargo Ocupado = "+ f1.cargo + "\nSalario = R$" + f1.salario + "\nBonificação = R$" + f1.bonus);   
        System.out.println("Salário com Bonificação: R$"+f1.novoSalario); 
           
        Funcionario f2 = new Funcionario();  
        f2.nome = "Maria Souza";
        f2.matricula = "222222222";
        f2.rg = "4455667";  
        f2.depto = "Administração";
        f2.cargo = "Administradora";
        f2.salario = 2800.00;  
        f2.bonus = (200);  
        f2.novoSalario = f2.salario+f2.bonus;  
        f2.situacao(false);
        
        System.out.println(f2);  
        System.out.println("\nNome = " + f2.nome + "\nMatricula = " + f2.matricula + "\nRG = " + f2.rg + "\nDepartamento = "+ f2.depto + "\nCargo Ocupado = " + f2.cargo + "\nSalario = R$" + f2.salario + "\nBonificação = R$" +f2.bonus);  
        System.out.println("Salário com Bonificação: R$"+f2.novoSalario);
    
    }
       
    }

Não sei como fazer isso na classe de teste!!!

drsmachado

Por isso seria bom usar getters e setters.
Assim, quando você seta, no construtor, os valores dia, mes e ano e, como eles não estão indicados como private, você pode chamar assim (outra má prática, mas funciona)

System.out.println("Data de Admissao: " + f1.dataDeAdmissao.dia + "/" +
f1.dataDeAdmissao.mes + "/" + 
f1.dataDeAdmissao.ano);
liliansviana

OK, Obrigada, vou tentar;
Se eu não conseguir posto aki novamente… obrigada!!!

liliansviana

Não consegui ainda… Será q alguem poderia me ajudar, se possivel sem get e set, sou iniciante ainda não sei usa-los.

O erro acontece nesta parte, da classe testefuncionario

Funcionario f1 = new Funcionario();  

        data dataDeAdmissao = new data(10, 05, 2011); //ligação!    
        
        f1.dataDeAdmissao = dataDeAdmissao;

criei a classe data como o drsmachado me mostrou, só q qdu vou pra classe testefuncionario não sei como fazer para chamar a classe data!

PS: EU KERO Q O FUNCIONARIO POSSA ENTRAR COM O DIA, MES E ANO DE ADMISSÃO E Q ISSO SEJA EXIBIDO PARA ELE JUNTAMENTE COM AS OUTRAS INFORMAÇÕES EXISTENTES.

Atte.

drsmachado

Algum erro?

liliansviana

sim, na parte do f1!

drsmachado

Qual erro?

liliansviana
run:

Exception in thread main java.lang.RuntimeException: Uncompilable source code - internal error; cannot instantiate data(int,int,int) at data to ()

at Funcionario.(Funcionario.java:23)

at TestaFuncionario.main(TestaFuncionario.java:14)

Java Result: 1
drsmachado

O erro iinforma que a classe data não foi compilada.
Qual IDE está utilizando?

liliansviana

netbeans 7.0

drsmachado

Muito estranho.

liliansviana
Fiz como vc disse

Mas  esse erro!

Tbm deu esse erro:

Exception in thread main java.lang.RuntimeException: Uncompilable source code - internal error; cannot instantiate data(int,int,int) at data to ()

at Funcionario.(Funcionario.java:23)

at TestaFuncionario.main(TestaFuncionario.java:14)

Java Result: 1

CONSTRUÍDO COM SUCESSO (tempo total: 10 segundos)
alberthy

Ai vai sua solução…

Classe para Teste:

public class App {

	public static void main(String[] args) {
		
		Funcionario f1 = new Funcionario();
		
		f1.setNome("Albert");
		f1.setRg("[telefone removido]");
		
		f1.dataEntrada.dia = 10;
		f1.dataEntrada.mes = 05;
		f1.dataEntrada.ano = 2011;
		
		f1.mostrarTudo();

	}

}

Classe Data:

public class Data {
	
	int dia;
	int mes;
	int ano;
	
	public Data(){}
	
	public Data(int dia, int mes, int ano) {
		this.dia = dia;
		this.mes = mes;
		this.ano = ano;
	}

	
}

Classe Funcionario:

public class Funcionario {
	
	private String nome;
	private String rg;
        Data dataEntrada = new Data();


       public void mostrarTudo(){
		
		System.out.println("Nome: "+this.nome);
		System.out.println("RG: "+this.rg);
		System.out.printf("Data Entrada: %d/%d/%d \n",this.dataEntrada.dia,
													  this.dataEntrada.mes,
													  this.dataEntrada.ano);
		
	}


        // Getters e Setters para NOME e CPF aqui. Tirei os mesmos para Data. Para mostrar a forma que você quer.

}

Abraço.

Criado 4 de maio de 2011
Ultima resposta 10 de mai. de 2011
Respostas 19
Participantes 3