Erro de ArrayIndexOut

6 respostas
C

Bom dia, estou tendo esse erro de ArrayIndexOut…

Meu algoritmo é de dividir um vetor em 2 partes, e dividir os valores deles em outros 2 vetores exemplo:
A[1,2,3,4,5,6,10]

B[1,2,3] e C[5,6,10] (Seria ordenado assim)

Veja se tem erro.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package vetores;

/**
 *
 * @author Crazy
 */
public class VetorMegeSort {

    public static void main(String[] args)
    {
     int A[]={1,2,3,4,5,6,10};
     int B[]=new int[3]; int C[]=new int[3];


     int inicio =0;
     int fim = A.length;
     int meio = (inicio+fim)/2;

     for (int i=0; i<fim;i++)
     {
        B[i]=A[i];
     }
     for (int i=meio; i<fim; i++)
     {
         C[i]=A[i];
        }
       System.out.println("Vetor A - Inicio"); //mostra mensagem de valores no inicio
      imprimirElementos(A); //mostrar o vetor
     System.out.println("Vetor B"); //mostra mensagem de valores no inicio
      imprimirElementos(B); //mostrar o vetor
        System.out.println("Vetor C"); //mostra mensagem de valores no inicio
      imprimirElementos(C); //mostrar o vetor


    }


     public static void imprimirElementos(int A[]) { //criar meto imprimirelementos
          for (int elementos : A) { //for aprimorado para os elementos até o tamanho do vetor
             System.out.print(elementos + " - "); // irá mostraros elementos desse vetor
          }
          System.out.println();//quebra de linha
       }
}

6 Respostas

drigo.angelo

Na linha 24. Deixe assim:

for (int i=0; i<meio;i++)
C

Erro continuo…
;/

nel

Antes de mais nada, se tens um vetor de tamanho 7, qual acha que é a metade disso?
Se dividires por 2, é 3.5. Não podes salvar esse valor em um int, concorda ? :slight_smile:

Começa por ai a sua análise.
Você criou dois vetores de 3 posições sendo que possui 7 valores, onde fica o valor do meio?

Você só terá dois vetores de mesmo tamanho quando o seu vetor principal foi divisivel por 2 e cujo o resto da divisão é 0.
Algo como : vetor.lenght % 2 == 0

Isso significa que terá dois vetores de mesmo tamanho.
ArrayIndexOutOfBound significa que está tentando acessar uma posição do vetor inexistente, vamos supor um vetor de tamanho 3 e você tenta acessar a posição 4, gera essa exception.

Poste a exceção completa e dê um System.out.println() no seu valor “fim”.
Vais entender melhor o motivo do erro.

Abraços.

drigo.angelo

Linha 30, coloque assim:

C[i-meio]=A[i];
C

Realmente era o tamanho dos vetores B e C que estavam com erros.
Coloquei ambos tamanho 7 e deu certo.
Mas agora fica minha duvida…
Como posso dividir um vetor em 2 vetores diferente ( igual tentei realizar acima ).
Valeu

nel

crazyshock:
Realmente era o tamanho dos vetores B e C que estavam com erros.
Coloquei ambos tamanho 7 e deu certo.
Mas agora fica minha duvida…
Como posso dividir um vetor em 2 vetores diferente ( igual tentei realizar acima ).
Valeu

Pensando em algo rápido, podes verificar se o resto da divisao (x % 2 == 0) por 2 é 0, caso seja, é um número par e podes obter um resultado inteiro.
Caso contrário, pegue o tamanho do vetor e some + 1, depois divida por dois. Aqui, você sabe que o seu primeiro vetor terá um elemento a mais que o segundo, e quando for percorrer a lista do segundo vetor, diminua -1 (ou talvez 2, não pensei bem) para evitar de acessar um posição inadequada.

Pense com calma que terá uma solução muito melhor que essa.
Abraços.

Criado 30 de março de 2011
Ultima resposta 31 de mar. de 2011
Respostas 6
Participantes 3