Exercicios

Boa Noite, estou com dificuldades de terminar os exercicios da apostila caelum no exercicio do capitulo 5.5 e 5.6

void contem
e void novoVetor

no caso contem tem que verificar se o funcionario esta na empresa e o novoVetor tem que criar um novo vetor maior e passar os funcionarios do vetor menor para o maior quando ele estiver cheio.

minha duvida nao sei se fiz correto o void contem se realmente ele vai funcionar, e o void novoVetor nao consigo fazer o tipo Funcionario virar Funcionario2 mesmo moldando ele com (Funcionario2). segue meu codigo.

agradeço que puder me ajudar.

Obrigado.

os Void em questão estão em NEGRITO

class Funcionario {
String nome;
String localDeTrabalho;
String dataEntradaBanco;
String rg;
double salario;
boolean trabalha; // variavel que vai receber sim ou não

void bonifica(double quantidade) {
	this.salario += quantidade;
}

void admite(String nome, String depto, String data, String rg, double salario) {
	this.trabalha = true;
	this.nome = nome;
	this.localDeTrabalho = depto;
	this.dataEntradaBanco = data;
	this.rg = rg;
	this.salario = salario;
}

void demite() {
	this.trabalha = false;
	System.out.println("Funcionario Demitido");
}

void mostra(){
	System.out.println("Nome: "+this.nome);
	System.out.println("Departamento: "+this.localDeTrabalho);
	System.out.println("Data Admissão: "+this.dataEntradaBanco);
	System.out.println("RG: "+this.rg);
	System.out.println("Salário: "+this.salario);
	if(trabalha){
		System.out.println("Status: Ativo ");
	}
	else{
		System.out.println("Status: Inativo ");
	}
}

}
class Funcionario2 {
String nome;
String localDeTrabalho;
String dataEntradaBanco;
String rg;
double salario;
boolean trabalha; // variavel que vai receber sim ou não
}

class Empresa {
String nome;
Funcionario[] empregados;
String cnpj;
Funcionario2[] operarios;

void adiciona(Funcionario f) {
	for(int x = 0; x < this.empregados.length; x++){
		if(empregados[x] == null){
			this.empregados[x] = f;
			break;
		}
	}
}

void mostraEmpregados() {
	for (int i = 0; i < this.empregados.length; i++) {
		if(empregados[i] != null){
			this.empregados[i].mostra();
		}
	}
}

[b]boolean contem(Funcionario f ){
boolean	possui = false;
	for (int i = 0; i < this.empregados.length; i++) {
		if(this.empregados[i] == f){
		possui = true;
		}
	}
	if(possui = true) {
		return true;
	}
	else {
		return false;
	}
}[/b]

[b]void novoVetor (Funcionario f){
	Funcionario[] Funcionario2 = new Funcionario[80];
	for(int i = 0; i < this.empregados.length; i++){
		for(int x = 0; x < this.operarios.length; x++){
		this.operarios[x] = (Funcionario2) empregados[i];
         }
      }
		
}
[/b]

}

public class Programa {
public static void main(String[] args) {
Funcionario f1;
f1 = new Funcionario();
f1.admite(“Zé”,“Limpeza”,“19/10/2010”,“8523654710”,628.53);

	Funcionario f2 = new Funcionario();
	f2.admite("Aluno","Cepro","23/10/2010","5264654",228.53);
	
	Empresa empresa = new Empresa();
	empresa.empregados = new Funcionario[20];
	empresa.nome = "aula Java";
	empresa.cnpj = "985.325.698/0001-63";
	
	empresa.adiciona(f1);
	empresa.adiciona(f2);
	
	empresa.mostraEmpregados();
	
	empresa.contem(f1);
	
	
}

}

Boa noite.

dá uma olhada nesse tópico.
Tem o exercício 5.5 resolvido.
http://www.guj.com.br/posts/list/208073.java#1139911

cara eu ja tinha lido esse post, só que ali falta justamente os dois o boolean contem e o void novoVetor

nesse post do link que voce me passou tem quase tudo menos isso.

o cara fez apenas o ate o 5.4

mesmo assim obrigado

fico no aguardo de mais ajuda.

Obrigado

eae galera nao tem ninguem ae que possa me dizer o que eu estou fazendo de errado ?

obrigado

Cara, põe teu código na TAG Code e coloca o enunciado, acho que vai ficar mais fácil…

Abs :wink:

Enunciado do exercicio:

  1. (Opcional) Crie um método para verificar se um determinado Funcionario se encontra ou não como
    funcionário desta empresa:
    boolean contem(Funcionario f) {
    // …
    }
    Você vai precisar fazer um for na sua array e verificar se a referência passada como argumento se encontra
    dentro da array. Evite ao máximo usar números hard-coded, isto é, use o .length.

  2. (Opcional) Caso a array já esteja cheia no momento de adicionar um outro funcionário, criar uma nova maior
    e copiar os valores. Isto é, fazer a realocação já que java não tem isso: uma array nasce e morre com o
    mesmo length.

Pois Bem, minha duvida se meu Void contem esta correto ?

e como posso continuar ou refazer meu boolean novoVetor pois não consigo fazer o tipo Funcionario virar tipo Funcionario2 mesmo moldando ele (Funcionario2).

Obrigado a quem ajudar.

Abraço.

[code]class Funcionario {
String nome;
String localDeTrabalho;
String dataEntradaBanco;
String rg;
double salario;
boolean trabalha; // variavel que vai receber sim ou não

void bonifica(double quantidade) {
this.salario += quantidade;
}

void admite(String nome, String depto, String data, String rg, double salario) {
this.trabalha = true;
this.nome = nome;
this.localDeTrabalho = depto;
this.dataEntradaBanco = data;
this.rg = rg;
this.salario = salario;
}

void demite() {
this.trabalha = false;
System.out.println(“Funcionario Demitido”);
}

void mostra(){
System.out.println("Nome: "+this.nome);
System.out.println("Departamento: "+this.localDeTrabalho);
System.out.println("Data Admissão: "+this.dataEntradaBanco);
System.out.println("RG: "+this.rg);
System.out.println("Salário: "+this.salario);
if(trabalha){
System.out.println("Status: Ativo ");
}
else{
System.out.println("Status: Inativo ");
}
}
}
class Funcionario2 {
String nome;
String localDeTrabalho;
String dataEntradaBanco;
String rg;
double salario;
boolean trabalha; // variavel que vai receber sim ou não
}

class Empresa {
String nome;
Funcionario[] empregados;
String cnpj;
Funcionario2[] operarios;

void adiciona(Funcionario f) {
for(int x = 0; x < this.empregados.length; x++){
if(empregados[x] == null){
this.empregados[x] = f;
break;
}
}
}

void mostraEmpregados() {
for (int i = 0; i < this.empregados.length; i++) {
if(empregados[i] != null){
this.empregados[i].mostra();
}
}
}

boolean contem(Funcionario f ){
boolean possui = false;
for (int i = 0; i < this.empregados.length; i++) {
if(this.empregados[i] == f){
possui = true;
}
}
if(possui = true) {
return true;
}
else {
return false;
}
}

void novoVetor (Funcionario f){
Funcionario[] Funcionario2 = new Funcionario[80];
for(int i = 0; i < this.empregados.length; i++){
for(int x = 0; x < this.operarios.length; x++){
this.operarios[x] = (Funcionario2) empregados[i];
}
}

}

}

public class Programa {
public static void main(String[] args) {
Funcionario f1;
f1 = new Funcionario();
f1.admite(“Zé”,“Limpeza”,“19/10/2010”,“8523654710”,628.53);

Funcionario f2 = new Funcionario();
f2.admite(“Aluno”,“Cepro”,“23/10/2010”,“5264654”,228.53);

Empresa empresa = new Empresa();
empresa.empregados = new Funcionario[20];
empresa.nome = “aula Java”;
empresa.cnpj = “985.325.698/0001-63”;

empresa.adiciona(f1);
empresa.adiciona(f2);

empresa.mostraEmpregados();

empresa.contem(f1);

}

} [/code]

Então, esse método contem seu é do tipo boolean e nao void ok?! E nao seria verificar se ja existe algum funcionario com o mesmo atributo nao? Tipo mesmo rg, alguma coisa assim?

Porque se vc for cadastrar alguem, toda hora vc precisará dar um new Funcionario(), para ter um funcionario novo, sendo assim vc nunca tera duas referencias iguais.

Aí vc faria:

[code]boolean contem(Funcionario f ){

for (int i = 0; i < this.empregados.length; i++) {
if(this.empregados[i].rg.equals(f.rg)){
return true;
}
}
return false;
}[/code]

Sobre o metodo novoVetor ele é do tipo void e nao boolean ok?! E deve estar gerando um ClassCastException nesta linha ai this.operarios[x] = (Funcionario2) empregados[i];

Um Funcionario nao É-UM Funcionario2 por isso á exceção.

everton realmente eu inverti quando escrevi void o novoVetor e boolean o contem, obrigado pelas dicas