Curso caelum fj - 11 - Array 6)

class TestaEmpresa {
public static void main(String[] args) {

Empresa emp = new Empresa();
Data dt = new Data();
dt.dia = 01;
dt.mes = 01;
dt.ano = 01;
String f  = "F";
for (int i =0;i<10;i++){
	
	emp.funcionarios[i] = new Funcionario();
	emp.funcionarios[i].salario = 3200;
	emp.funcionarios[i].nome = f+i;
	emp.funcionarios[i].departamento = "Escritorio";
	emp.funcionarios[i].dataDeEntrada  = dt;
	emp.funcionarios[i].rg = "12255896666";
	emp.funcionarios[i].Mostra();
		
}

	emp.funcionarios[9] = new Funcionario();
	emp.funcionarios[9].salario = 3200;
	emp.funcionarios[9].nome = f+9;
	emp.funcionarios[9].departamento = "Escritorio";
	emp.funcionarios[9].dataDeEntrada  = dt;
	emp.funcionarios[9].rg = "12255896666";
	emp.funcionarios[9].Mostra();
}
}

galera pelo que eu entendi no codigo acima teria que dar erro certo? Mas ele me retorna duas vezes a posição F9 oque eu fiz de errado, não deveria ter estourado a array?

Dentro do FOR vc esta imprimindo a posição F9 uma vez e após o FOR está imprimindo novamente.

sim eu queria que desse o erro mas não da, e queria saber porque ?

na realidade esqueci de botar o exercicio.

  1. (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.
    Usando o this para passar argumento
    Dentro de um método, você pode usar a palavra this para referenciar a si mesmo e pode passar
    essa referência como argumento.

O seu array tem 10 posições, certo? Então ele pode ser acessado com índices de 0 a 9.

O for que você fez usa índices i de 0 a 9, então ele não causa problemas. E, depois, você acessa emp.funcionarios[9] o que também não dá erro.

Se quer estourar o array para ver o erro, acesse emp.funcionarios[10]

Desculpe me expressei errado na verdade não queria qu o array estourasse e sim que ele encontresse uma posição ja ocupada no array

???

não sei bem se eu te intendi direito mais… isso não da erro, uma variavel de referencia pode ser alterada pra referenciar um objeto novo(vc pode da um new nelae continuar usando)

a menos que ela tenha sido delcarada como final é claro… masi ao que me pareceu nao tem motivo pra isso dai nao funcionar…

Entendi, você quer retornar uma mensagem quando uma posição ja estiver sido ocupada com alguma informação, então você inicia o array com null e desenvolve uma lógica para verificar se a posição é null ou não, se for null ele guarda a informação senão retorna sua mensagem.

Dica: use um condicional ternário.

Boa sorte.

sim mas o eu ja fiz com if mas ja que comentaram como ficaria isso

this.funcionarios[i] = (this.funcionarios[i]==null)? f : System.out.println(“Esta cheia”);

eu queria mesmo saber o que o pessoal da caelum que no exercicio que eu postei loga acima!

Veja essa solução:

class Empresa {
   Funcionario[] empregados = new Funcionario[10];

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

       System.out.println("Nao adicionei porque o array já estava cheio");
   }
}

Sergio valeow mesmo eu tinha desenvolvido algo parecido ja mas minha duvida é referente ao realocar e contruir uma array maior se tiver cheia

detalhe não sei se estou certo ele não dar erro na variavel f.length???

oops, eh empregados.length! hehehe

olha uma solucao para a realocacao que dobra o tamanho do array sempre que estoura:

class Empresa {
   Funcionario[] empregados = new Funcionario[10];

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

       // realoca se não achou posicao pra ele
       Funcionario[] temp = new Funcionario[this.empregados.length * 2];
       for (int i = 0; i < this.empregados.length; i++) {
              temp[i] = empregados[i];
       }
       this.empregados = temp;

      // manda adicionar depois de realocado
      this.adiciona(f);
   }
}

cara valeow mesmo pela ajuda, mas deixa eu te perguntar uma coisa vc trabalha na caelum?

Sou instrutor aqui na Caelum :slight_smile:

opa deixa eu te contar uma então sobre minha envestida eu sou programador em vb e pascal entre algumas de web tipo html dhtml action script do flash, mas programo mesmo em vb e pascal as outras digamos que tenho um conhecimento razoavel ai quero aprender java mais aqui na minha cidade não tem caelum ai baixei a fj-11 eestou lendo e fazendo os exercicios, pode me dar algum conselho?

Oi acidotherwise!

Se você não pode fazer um curso, recomendo que estude bastante! Algumas das nossas apostilas estão abertas para download e já podem ser um bom ponto de partida (embora a apostila não seja desenvolvida para estudo individual, mas sim para apoio do curso, dá para acompanhar relativamente bem).

E se algum dia estiver aqui pra SP, dá uma passada na Caelum para trocarmos uma ideia…

[]'s
Sérgio

valeow pode deixar sim, que se for a SP eu passo ai, aqui ate tem caelum em POA mas minha cargo horaria e intervalo de tempo não me permitem sabe ai fica cmplicado o deslocamento
mas quero ver se nas ferias faço um curso de verão la com eles!