Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Implementação de adicionar em um determinado índice.

Eu tava pensando em outras implementações para esse método de adicionar um novo elemento em um determinado índice e pensei....

  • Verificar se existe algum elemento na posição
  • // declaração das variáveis
    private Aluno[] alunos = new Aluno[100];
    private int posicaoLivre = 0;
    
    public void adicionar(int index, Aluno aluno) {
        if(alunos[index] == null) { // Quer dizer que tenho a posição livre
            alunos[index] = aluno;
            posicaoLivre++;
            return;
        }
        // Não tenho a posição livre.
        // Logo, ir no índice livre e atribuir o elemento existente
        // Adicionar o elemento vindo do parâmetro na posição desejada
        // Incrementar a posição livre.
    
        alunos[posicaoLivre]  = alunos[index]
        alunos[index] = aluno;
        posicaoLivre++;
    }

    Eu fiz um teste aqui e funcionou. Qual seria o problema dessa implementação?

1 resposta
solução!

Olá, bom dia!

Entendi o propósito da implementação, mas vejo 2 problemas:

  1. O index precisa ser validado para garantir que não é maior que o tamanho do array.
  2. A definição da variável posicaoLivre não é segura e não vai funcionar para todos os casos. Teste, por exemplo, informar o indice 1 na primeira e na segunda execução. O código vai sobrescrever o primeiro aluno inserido, pois pela lógica, após a inserção do primeiro aluno na posição 1, a variável posicacaoLivre também fica como 1.

Para corrigir, caso a posição informada estivesse ocupada, eu buscaria uma posição livre em tempo de execução (sem utilizar a variável posicaoLivre). Para isso, usaria um for, por exemplo.

Espero ter ajudado. Abraço!