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

Gostaria de saber o porquê do meu código estar retornando um ArrayIndexOutOfBoundsException

/*Primeiro criei uma classe Nome */

public class Nome {

private String nome;

public Nome(String nome) {
    this.nome = nome;
}
public String getNome() {
    return nome;
}

}

/*Depois a classe main */

package teste;

import br.com.alura.notas.Nome;

public class IntercalaNome {

public static void main(String[] args) {

    Nome[] nomes = {
           new Nome("Andressa"),
           new Nome("Camila"),
           new Nome("Enzo"),
           new Nome("Fernando"),
           new Nome("Maria"),
           new Nome("Alberto"),
           new Nome("Jonas"),
           new Nome("Junior"),
           new Nome("Paloma"),
           new Nome("Paulo")
    };


    Nome[] rank = intercala(nomes,0,5,nomes.length);
    for(Nome nome: rank) {
        System.out.println(nome.getNome());
    }
}

private static Nome[] intercala(Nome[] nomes, int inicial, int miolo, int termino) {
    Nome[] resultado = new Nome[termino - inicial];
    int atual = 0;
    int atual1 = inicial;
    int atual2 = termino;

    while(atual1 < miolo && atual2 < termino) {
        Nome nome1 = nomes[atual1];
        Nome nome2 = nomes[atual2];

        if(nome1.getNome().compareTo(nome2.getNome()) < 0 ) {
            resultado[atual] = nome1;
            atual1++;
        } else {
            resultado[atual] = nome2;
            atual2++;
        }
        atual++;
    }


    while(atual1 < miolo) {
        resultado[atual++] = nomes[atual1++];
    }

    while(atual < termino) {
        resultado[atual++] = nomes[atual2++];
    }

    for (int contador = 0; contador < atual; contador++) {
        nomes[inicial + contador] = resultado[contador];
    }

    return nomes;
}

}

2 respostas

Use assim e veja se funciona

Nome[] rank = intercala(nomes, 0, 4, nomes.length-1);

E mude atual2++; para atual2--;nas duas ocorrências.

solução!

Achei 2 bugs, por isso não estava funcionando, mas muito obrigada pela ajuda Luiz Gustavo :)

Primeiro bug e causa da Exception:

//Não é atual e sim atual2
while(atual < termino) {//Erro
        resultado[atual++] = nomes[atual2++];
    }

Segundo bug: Quando declarei a variável atual2 atribui o valor do termino, mas o certo deveria ser:

int atual2 = miolo;