Sei que essa mesma duvida ja foi esclarecida por aqui, mas mesmo assim, parece que não esta funcionando, poderiam me ajudar?
Postarei os codigos e informarei o que esta saindo como resposta.
Classe Empresa:
public class Empresa {
String nome;
String cnpj;
Funcionario[] empregados;
/* aqui o metodo verifica se o array esta vazio e quando estiver, ele
adiciona um funcionario.*/
void adiciona(Funcionario f) {
for (int i = 0; i < empregados.length; i++) {
if (empregados[i] == null) {
empregados[i] = f;
System.out.println("Empregado adicionado!");
} else {
System.out.println("Vaga cheia");
}
}
}
//aqui imprime a posicao do funcionario e o salario do mesmo
void mostraEmpregados() {
for (int i = 0; i < this.empregados.length; i++) {
if (this.empregados[i] != null) {
System.out.println("Empregado na posicao : " + i);
System.out.println("Salario do mesmo: " + empregados[i].salario);
}
}
}
}</code>
Classe TestaEmpresa
<code>
public class TestaEmpresa {
public static void main(String[] args) {
Empresa empresa = new Empresa();
empresa.empregados = new Funcionario[4];
Funcionario f1 = new Funcionario();
f1.salario = 1_000;
empresa.adiciona(f1);
Funcionario f2 = new Funcionario();
f2.salario = 2_000;
empresa.adiciona(f2);
Funcionario f3 = new Funcionario();
f3.salario = 3_000;
empresa.adiciona(f3);
empresa.mostraEmpregados();
Quando imprimo sai o seguinte resultado:
Empregado adicionado!
Empregado adicionado!
Empregado adicionado!
Empregado adicionado!
Vaga cheia
Vaga cheia
Vaga cheia
Vaga cheia
Vaga cheia
Vaga cheia
Vaga cheia
Vaga cheia
Empregado na posicao : 0
Salario do mesmo: 1000.0
Empregado na posicao : 1
Salario do mesmo: 1000.0
Empregado na posicao : 2
Salario do mesmo: 1000.0
Empregado na posicao : 3
Salario do mesmo: 1000.0
Eu estava querendo que saisse os salarios que inseri na classe TestaEmpresa, mas não esta saindo.
Poderiam me ajudar por favor?
posta a sua classe Funcionario
em uma outra coisa, o seu output é muito estranho. dentro do adiciona() coloca o valor de i nos dois println pra gente entender por onde o programa esta indo.
acho estranho vc ter adicionado f1 f2 f3 e imprimir 4 salarios…
peczenyj
Sobre adicionar f1 f2 f3, e imprimir 4 salarios, é que ao invez de colocar 3 posicoes na instancia de Funcionario, eu coloquei 4 e não criei um f4.
Segue a classe Funcionario:
public class Funcionario {
Data dataEntrada2;
String nome;
String departamento;
double salario;
String dataEntrada;
String rg;
void recebeAumento(double valor){
this.salario = this.salario + valor;
}
double calculaGanhoAnual(){
return this.salario*12;
}
void mostra(){
System.out.println("Nome: " +this.nome);
System.out.println("RG : " +this.rg);
System.out.println("Departamento : " +this.departamento);
System.out.println("Salario : " +this.salario);
System.out.println("Dia : " +this.dataEntrada2.dia);
System.out.println("Dia : " +this.dataEntrada2.mes);
System.out.println("Dia : " +this.dataEntrada2.ano);
}
}
Eu coloquei 3 posicoes na instancia Funcionario agora, e adicionei o valor de i nos println que voce pediu. Segue o que imprimiu depois das mudancas.:
Empregado 0 adicionado!
Empregado 1 adicionado!
Empregado 2 adicionado!
Vaga 0 cheia
Vaga 1 cheia
Vaga 2 cheia
Vaga 0 cheia
Vaga 1 cheia
Vaga 2 cheia
Empregado na posicao : 0
Salario do mesmo: 1000.0
Empregado na posicao : 1
Salario do mesmo: 1000.0
Empregado na posicao : 2
Salario do mesmo: 1000.0
AH caramba.
veja como a ordem das mensagens nao faz sentido ( adiciona 1, 2 e 3 e depois vaga cheia, vaga cheia, … ).
o que acontece é: vc adiciona o seu empregado e continua o loop. entao vc coloca o f1 em todas as posições.
solução? interrompe o loop em adiciona.
adociona um break;
apos a mensagem “empregado adicionado” e testa.
se funcionar, me paga um chopp
Vou ter que te pagar um chopp parceiro kkkkkk, deu certo.
E parece que com isso eu entendi oque estava rolando.
Quando eu chamava o metodo adiciona(), no primeiro funcionario, ele via que todos os espacos criados na array estavam NULL, e ai adicionava o primeiro funcionario em todos os espacos.
Com o break, quando ele é chamado a primeira vez, ele verifica se o espaco esta NULL, se estiver ele insere, e depois para. Assim, quando o funcionario 2 chamar o metodo, ele faz o mesmo procedimento, insere no espaço 2, e para.
Correto esse raciocionio ne?
To começando agora em java, entao, meio que me perco em algumas coisas kkkk.
exatamente. com o break vai PARAR o loop for ( ou while ) mais interno.
é bem comum isso, imagina que vc esta procurando um dado elemento em um array. achou. vc vai continuar iterando por que?
para e se livra desse encosto.
Pode crê.
Não errarei mais depois disso.
Obrigado mesmo pela ajuda!
cara a parada não é “não errarei mais”"
é praticar. e muito.
a gente erra. eu erro. com 18 anos nas costas programando as vezes eu faço umas besteiras hediondas. não se cobre tanto.
mas tb não se cobre pouco. a primeira metade da minha vida eu sonhava em ter um computador, e o primeiro que tive era uma parada mais velho que a vó da Dercy Gonçalves. hoje tem internet, tem google, tem apostila da caelum.
mete as caras.
É isso mesmo, você tem razão.
Estou tentando fazer todos os exercícios da apostila de Java da Caelum de pouco em pouco.
Estou procurando entrar nesse ramo de trabalho e como não tenho experiencia, e já terminei a facul, pra eu conseguir algo hoje é só praticando todo dia, estudando , que uma hora pode aparecer uma oportunidade. Nem que seja pra trabalhar de graça. Adquirindo experiencia , é a válvula de escape que preciso kkk.