Duvida Exercicio 5.5 Array Caelum

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.