Boa noite galera, venho pela primeira vez pedir a ajuda de vocês. Estou tento um problema para exibir o campo salário de um funcionário. A estrutura do meu pequeno sistema consiste de uma classe usuario, empresa e testeEmpresa:
public class Funcionario {
double salario;
String nome;
String departamento;
Data dataDeEntrada;
String RG;
double ganhoAnual;
}
public class TestaEmpresa {
public static void main(String[] args) {
Empresa empresa = new Empresa();
empresa.empregados = new Funcionario[10];
Funcionario f1 = new Funcionario();
f1.nome = "Pedro";
f1.salario = 1500;
f1.departamento = "logistica";
//System.out.println(empresa.empregados[0].salario);
Funcionario f2 = new Funcionario();
f1.nome = "Caio";
f1.salario = 1800;
f1.departamento = "administracao";
empresa.adiciona(f1);
empresa.adiciona(f2);
empresa.mostrarSalario();
}
}
Quanto executo o método mostrarSalario(), apenas exibe o valor default do campo salário (0.0), não é passado os valores que atribui a instâcia de cada funcionário: 1500, 1800. Gostaria de saber onde errei no cógido acima e o que poderiam me sugerir? Desde já agradeço e um feliz natal
// Recebe um funcionario como parametro
void adiciona(Funcionario f){
for(int i = 0; i< empregados.length; i++){
// vamo supor que o seu empregados.length retorne 10.. você vai atribuir de i até 10 o mesmo funcionário?
// ou vamos supor que você não adicionou nenhum funcionário se i é = a 0 e empregados.length retorna 0... o que está acontecendo?
empregados[i] = f;
}
Vai uma dica… Você tem que descobrir qual é a posição vazia para gravar seu funcionário no vetor.Faça um indice de controle inicialmente e depois tente aperfeiçoar utilizando recursos da própria linguagem.
//variavel global
int index = 0 ;
public void adiciona(Funcionario f)
{
empregados[index] = f;
index++;
}
Você inicializou um objeto funcionário, e passou como argumento para o método adiciona! Só que tem um porém…Você não atribuiu valores para as variáveis de instância de objeto que você criou…
Outro problema é que:
Esse método de adiciona está errado, ele sempre vai atribuir para todos as variáveis de referência da matriz a cópia do que você passou por valor.
Outra coisa… isto que você está utilizando é um vector não um array.
Você deve sempre pensar o porque de utilizar y ou z.
Exemplo:
Ao adicionar um funcionário você está utilizando uma estrutura de repetição. Porque?
realmente é necessário?
Você simplemente poderia fazer;
void adicionaFuncionario(Funcionario f)
{
/*Pense e veja se isto está certo se sim porque ou caso contrário porque não?
Lembre-se que o indice inicial do vetor é 0.
*/
int i = empregados.length;
empregados[i] = f;
}