Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
11
respostas

Dúvida no Ex.2 da Aula 04 de Arrays

Galera o exercício pede para que o método adiciona analise a minha Array e verifique se está vazia para poder adicionar um novo funcionário. Eu fiz esse código para resolver esta questão, esta correto?

``` package com.empresa;

public class Empresa {

Funcionario funcionario;

private String nome; private String cnpj;

public String getNome() { return nome; }

public void setNome(String nome) { this.nome = nome; }

public String getCnpj() { return cnpj; }

public void setCnpj(String cnpj) { this.cnpj = cnpj; }

} ```

11 respostas

Não consegui editar o código acima, colei errado. Segue o correto:

public class Empresa {

Funcionario[] empregados; private String nome; private String cnpj;

void adiciona(Funcionario funcionario) {

for(int i = 0; i <= this.empregados.length; i++) {

if(this.empregados[i] == null) { this.empregados[i] = funcionario; break; }

}

}

}

public class Empresa {

    Funcionario[] empregados;
    private String nome;
    private String cnpj;

    void adiciona(Funcionario funcionario) {

        for(int i = 0; i <= this.empregados.length; i++) {

            if(this.empregados[i] == null) {
                this.empregados[i] = funcionario;
                break;
            }

        }

    }

}

Cara faltou um botão de editar post nesse fórum :v Postei várias vezes, mas não foi por que eu quis.

Acredito que está certo sim. o for começa em 0 que é a primeira posição do Array; o this.empregados.length garante que não de oArrayIndexOutOfBoundsException; O if verifica se a posição está livre, se não estiver ele vai pra próxima até achar, se estiver livre ele coloca o funcionário nessa posição e sai do for (essa é a parte mais importante, sem o break; ele iria colocar o mesmo funcionário em todas as posições livres).

Só uma correção que eu não tinha visto, no for você colocou <=, dessa forma ele vai passar um espaço do tamanho total do Array, por exemplo, se seu Array tiver 10 posições (Funcionario[10]) as posições do seu Array irão de 0 até 9, quando usamos o .length ele retorna o tamanho do Array (10), e se colocarmos i<=10 ele irá tentar acessar: 0, 1, 2 ... 9, 10 (totalizando 11 posições), quando ele chegar nessa ultima vai dar ArrayIndexOutOfBoundsException, por isso nesses casos, utilizamos somente <

Sim isso eu tinha visto que estava errado, mas não consegui editar a postagem. Mas a minha dúvida é como que esse método vai funcionar. Por exemplo, como vou criar um novo funcionário usando esse método? Eis a questão, eu sei como o método funciona, mas não sei como chamá-lo :/

solução!

Boa tarde Diego!

Este método não cria um funcionário, ele apenas adiciona o funcionário na lista de empregados da empresa.

Para criar um funcionário você deverá fazer:

Funcionario funcionario = new Funcionario();

Depois adicione este funcionário na lista da empresa:

Funcionario funcionario = new Funcionario();
new Empresa().adiciona(funcionario);

Espero ter ajudado, bons estudos!

Show Phelipe, era isso que eu gostaria de saber :D

Obrigado a todos pelas resposta.

Abraços!

Phelipe, Boa tarde! Poderia me explicar por que usa-se o parenteses depois de Empresa? new Empresa().adiciona(funcionario);

Obrigado

Boa noite Rodrigo!

Usa-se () depois de new Empresa, pois você está invocando o construtor default (padrão) da classe Empresa.

Também poderia fazer assim:

Empresa empresa = new Empresa();
empresa.adiciona(funcionario);

Espero ter ajudado, abraço!

Obrigado Phelipe,

ainda não tinha visto essa maneira mais direta de fazer essa operação. Ajudou muito!!!

Muito Obrigado!!!

Rodrigo