1
resposta

Método Adiciona

Estou tentando executar o método adiciona , mais não estou conseguindo solucionar corretamente pois insiro um novo elemento no array em uma determinada posição, mas o item é inserido , mas não apaga a posição que ele se encontrava, ou seja ficam duplicados

public void adiciona(int posicao, Aluno aluno) {
        this.garanteEspaco();

if (!posicaoValida(posicao)) {
    throw new IllegalArgumentException("Posicao Inválida");
}
 for(int i = this.totalDeAlunos - 1; i >= posicao; i--) {
       this.alunos[i+1] = this.alunos[i];
    }
    this.alunos[posicao] = aluno;
    this.totalDeAlunos++;
}

Jonatas está duplicando

aparece dessa forma [Priscila, João, Jonatas, Pedro, Jonatas, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]

Seria possível me ajudar, pois não estou entendendo como posso remover o elemento depois de inclui-lo e remover a repetição.

1 resposta

Olá Aevilés, tudo bem?

Pelo que entendi, você está tentando adicionar um novo elemento em uma determinada posição de um array, mas está tendo problemas com a duplicação de elementos.

No seu código, você está movendo todos os elementos a partir da posição desejada para a direita, para abrir espaço para o novo elemento, e então adicionando o novo elemento na posição desejada. Porém, isso não remove o elemento que já estava naquela posição, o que causa a duplicação.

Para resolver esse problema, você pode simplesmente mover todos os elementos a partir da posição desejada para a direita, sem incluir o elemento que já estava naquela posição. Ou seja, você pode começar o loop em i = this.totalDeAlunos - 1 e parar em i > posicao, em vez de i >= posicao.

Assim, o elemento que já estava na posição desejada será "empurrado" para a direita, mas não será incluído novamente na posição que já ocupava.

Veja como ficaria o seu código com essa modificação:

public void adiciona(int posicao, Aluno aluno) {
    this.garanteEspaco();

    if (!posicaoValida(posicao)) {
        throw new IllegalArgumentException("Posicao Inválida");
    }

    for(int i = this.totalDeAlunos - 1; i > posicao; i--) {
        this.alunos[i+1] = this.alunos[i];
    }

    this.alunos[posicao+1] = this.alunos[posicao];
    this.alunos[posicao] = aluno;
    this.totalDeAlunos++;
}

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software