Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Por que o Java não retorna erro ao inserirmos mais elementos do que um array é capaz de suportar?

Estou com dúvida no seguinte código: eu criei um método adicionaFuncionario que verifica qual a próxima posição livre em um array e insere um funcionário. Mas o código abaixo especifica um array com 10 posições e eu faço 12 inserções de funcionários com o método criado. O Java insere os 10 primeiros funcionários e descarta os 2 últimos, sem me mostrar nenhuma mensagem de erro. Por que isso é assim?

class Funcionarios {
    String nome;
    String cpf;
    String rg;
}

class Empresas {
    String nome;
    Funcionarios[] funcionario;

    void adicionaFuncionario(String nome, String cpf, String rg) {
        int posicao_livre = 0;
        for (int i = 0; i < this.funcionario.length; i++) {
            if ( this.funcionario[i] == null) {
                posicao_livre = i;
                break;
            }
        }
        this.funcionario[posicao_livre] = new Funcionarios();
        this.funcionario[posicao_livre].nome = nome;
        this.funcionario[posicao_livre].cpf = cpf;
        this.funcionario[posicao_livre].rg = rg;
    }

    void dadosDaEmpresa() {
        System.out.println("Empresa: " + this.nome);
        for (int i = 0; i < this.funcionario.length; i++) {
            if ( this.funcionario[i] == null) {
                continue;
            } else {
                System.out.println(i+1 + " -- " + this.funcionario[i].nome + " (CPF: " + this.funcionario[i].cpf + "; RG: " + this.funcionario[i].rg + ")");
            }
        }
    }
}

class Programa2 {
    public static void main (String[] args) {
        Empresas pj = new Empresas();
        pj.nome = "Minha Empresa";

        pj.funcionario = new Funcionarios[10];

        pj.adicionaFuncionario("Zé Goiaba", "123.456.789-01", "123.456");
        pj.adicionaFuncionario("Zé Ruela", "234.567.890-12", "234.567");
        pj.adicionaFuncionario("Goiabão", "345.678.901-23", "345.678");
        pj.adicionaFuncionario("Ruelão", "456.789.012-34", "456.789");
        pj.adicionaFuncionario("Goiaba Ruela", "567.890.123-45", "567.890");
        pj.adicionaFuncionario("Zé Goiaba", "123.456.789-01", "123.456");
        pj.adicionaFuncionario("Zé Ruela", "234.567.890-12", "234.567");
        pj.adicionaFuncionario("Goiabão", "345.678.901-23", "345.678");
        pj.adicionaFuncionario("Ruelão", "456.789.012-34", "456.789");
        pj.adicionaFuncionario("Goiaba Ruela", "567.890.123-45", "567.890");
        pj.adicionaFuncionario("Zé Goiaga", "123.456.789-01", "123.456");
        pj.adicionaFuncionario("Zé Goiaga", "123.456.789-01", "123.456");

        pj.dadosDaEmpresa();
    }
}
3 respostas
solução!

Então em java retorna o erro ArrayIndexOutOfBoundsException , não retorna erro porque neste trecho de codigo vc evita que seja inserido algum valor que o Array não suporte

for (int i = 0; i < this.funcionario.length; i++) {
            if ( this.funcionario[i] == null) {
                posicao_livre = i;
                break;
            }
        }

Teste inserir o funcionario sem esse metodo.

pj.funcionario[10] = new Funcionarios();

Neste caso em específico o primeiro elemento esta sendo substituido, pelo valor alem do array. Isso se da ao fato do valores das linhas 11 e 12 serem :

pj.adicionaFuncionario("Zé Goiaga", "123.456.789-01", "123.456"); pj.adicionaFuncionario("Zé Goiaga", "123.456.789-01", "123.456");

Que é o equivalente o valor da primeira linha.

Obrigado a vocês, agora eu entendi.