Solucionado (ver solução)
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