Problemas com vetor de inverter

2 respostas
kamuiorg

Ola galera!
Toh com o seguinte problema:
Tenho que criar uma classe que inverta as possições de um vetor.
Mas o problema é q esta dando o seguinte erro:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8

Segue abaixo o codigo da classe inversora e do programa principal.
Desde de ja Obrigado ^^

package teste3;

/**
 *
 * @author K4MU1
 */
public class Inversora {

    public void inverter(int [] vetor)
    {
        int Aux;
        for (int i = vetor.length; i > (vetor.length / 2) + 1; i--)
        {
            Aux = vetor[i];
            vetor[i] = vetor[vetor.length - i + 1];
            vetor[vetor.length - i + 1] = Aux;
        }

    }

    public void escreverVetor(int [] vetor)
    {
        for (int i = 0; i < 8;i++)
            System.out.println(vetor[i]);
    }


}
package teste3;

/**
 *
 * @author K4MU1
 */
import java.util.Scanner;
public class Teste3 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);

        Inversora vet = new Inversora();
        int x = 10;

        int [] vetor  = new int [x];

        for (int i = 0; i < x;i++)
        {
            vetor[i] = sc.nextInt();
        }

        vet.inverter(vetor);

        vet.escreverVetor(vetor);
        
    }

}

2 Respostas

S

Já tem um erro nesta linha

Na linha 14 da inversora, pois o array não possui a posição array.length, ele possui a posição array.length - 1, talvez seja aí o erro.

Pois o array tem 10 posições por exemplo, porém ela não começa do 1 até a posição 10, e sim da 0 a 9, entendeu?

T

Atenção - um vetor dimensionado com 10 elementos (int[10] -> .length == 10) vai do elemento [0] até o elemento [10-1], ou seja, [9].

Portanto, você vai ter um problema logo de cara aqui:

for (int i = vetor.length; i > (vetor.length / 2) + 1; i--)  
         {  
             Aux = vetor[i];  // <-- já dá problema na primeira iteração

Talvez você quisesse algo como:

for (int i = vetor.length - 1; i > (vetor.length / 2) + 1; i--)  
         {  
             Aux = vetor[i];
Criado 11 de março de 2009
Ultima resposta 11 de mar. de 2009
Respostas 2
Participantes 3