Java - Error ArrayIndexOutOfBoundsException

 
Vista:
sin imagen de perfil

Error ArrayIndexOutOfBoundsException

Publicado por Enmanuel (2 intervenciones) el 06/07/2016 01:22:00
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import java.util.Scanner;
public class Ordenamiento{
    private Scanner teclado;
    private int[] vec;
 
     public void cargar() {
        teclado=new Scanner(System.in);
        System.out.print("Cuantos elementos tendrá el vector:");
         int cant;
        cant=teclado.nextInt();
        vec=new int[cant];
	    for(int f=0;f<vec.length;f++) {
            System.out.print("Ingrese elemento:");
            vec[f]=teclado.nextInt();
	    }
	}
 
    public void ordenar() {
        for(int k=0;k<vec.length;k++) {
            for(int f=0;f<vec.length-k;f++) {
                if (vec[f]>vec[f+1]) {
                    int aux;
                    aux=vec[f];
                    vec[f]=vec[f+1];
                    vec[f+1]=aux;
                }
            }
        }
    }
 
    public void imprimir() {
	    System.out.println("Vector ordenados de menor a mayor.");
        for(int f=0;f<vec.length;f++) {
            System.out.println(vec[f]);
        }
    }
 
    public static void main(String[] ar) {
        PruebaVector15 pv=new Ordenamiento();
        pv.cargar();
        pv.ordenar();
        pv.imprimir();
    }
}


Es de Ordenar valores de un vector y me marca un error en el Metodo Ordenar en la linea que esta en negrita...

No se que hacer...Y quiero despejar esa duda por que para mi esta bien...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 144
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Error ArrayIndexOutOfBoundsException

Publicado por Thanatos (97 intervenciones) el 06/07/2016 08:44:36
El error que muestra el compilador es ArrayIndexOutOfBoundsException, aunque la línea del error es la siguiente a la que tienes marcada en negrita, es decir, la condición:

1
2
3
if (vec[f]>vec[f+1]) {
    // ...
}

El error indica que te saliste del rango permitido por los índices del vector. Para encontrar el error podrías utilizar el depurador del IDE que estás utilizando (por ejemplo aquí se muestra como utilizar el depurador de Eclipse), o podrías hacer una prueba de escritorio.

Si se quiere hacer una prueba de escritorio, se debe tomar algún caso de prueba. Como el error que muestra el compilador indica que el problema está en los índices, no es necesario tomar en cuenta los elementos que ingrese el usuario para llenar el vector.

Por ejemplo supongamos que el vector tiene 3 elementos, entonces sus índices serán: 0, 1 y 2.

Esta es la prueba de escritorio para los índices que se utilizan en la condición, durante la primera iteración del bucle externo (k = 0):

dbg00


Como puedes ver en la tabla, cuando f toma el valor del máximo índice del vector (2), la sentencia if intenta comparar una posición que está fuera de rango, ya que para un vector de 3 elementos, no existe el índice 3.

Lo mismo sucederá para cualquier cantidad de elementos que tenga el vector.

Te dejo el código modificado para que puedas comparar el uso de los índices:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.util.Scanner;
 
public class Ordenamiento{
    private int[] vec;
 
    public void cargar() {
        Scanner teclado = new Scanner(System.in);
 
        System.out.print("Cuantos elementos tendra el vector: ");
        int cant = teclado.nextInt();
        vec = new int[cant];
 
        for (int f = 0; f < vec.length; ++f) {
            System.out.print("Ingrese elemento: ");
            vec[f] = teclado.nextInt();
        }
 
        teclado.close();
    }
 
    public void ordenar() {
        int aux;
 
        for (int k = 0; k < vec.length; ++k) {
            for (int f = 1; f < vec.length - k; ++f) {
                if (vec[f - 1] > vec[f]) {
                    aux = vec[f - 1];
                    vec[f - 1] = vec[f];
                    vec[f] = aux;
                }
            }
        }
    }
 
    public void imprimir() {
        System.out.println("\nVector ordenado de menor a mayor.");
        for (int f = 0; f < vec.length; f++) {
            System.out.println(vec[f]);
        }
    }
 
    public static void main(String[] args) {
        Ordenamiento obj = new Ordenamiento();
        obj.cargar();
        obj.ordenar();
        obj.imprimir();
    }
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Error ArrayIndexOutOfBoundsException

Publicado por Enmanuel (2 intervenciones) el 06/07/2016 22:49:11
Mchisimas Gracias Thanatos, De verdad fue de gran ayuda.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar