Java - Ayuda error de arreglo java NetBeans

 
Vista:
Imágen de perfil de Jesús

Ayuda error de arreglo java NetBeans

Publicado por Jesús (1 intervención) el 03/12/2016 02:18:43
Hola, soy nuevo en el foro, espero poder contribuir con lo poco que se y espero puedan aclarar las dudas que llegue a tener, o auxiliarme para aprender más. Muchas gracias

La verdad estoy aprendiendo a programar en java, así que espero no se molesten.

Estoy realizando una interfaz gráfica, que me permita ordenar una cantidad de números al azar mediante 3 métodos diferentes, los botones capturaran el número de elementos aleatorios, introduje el método dentro de ese mismo botón, para que ordene todos los números.

en la primera imagen todo corre bien cuando me da los numeros aleatorios.


pero me marca un error, no se que sea, pues no se mucho sobre java (prácticamente no se nada, pero quiero aprender),

les dejo el código del boton, al principio funcionaba bien, pero después simplemente ya no corre, el error me marca la línea que dejo en la segunda imagen.

primera-prueba
prueba2

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
private void BurbujaActionPerformed(java.awt.event.ActionEvent evt) {
 
 
 
        int x = Integer.parseInt(JOptionPane.showInputDialog(null, "introduzca un número de elementos a ordenar", "Quicksort", JOptionPane.INFORMATION_MESSAGE));
 
 
 
        System.out.println("El valor ingresado es: " + x);
 
 
 
         int[] arreglo= new int[x];
 
 
 
       for (int i = 0; i < x; i++)
 
               {
 
                   arreglo[i]= (int) (Math.random()*100+1);
 
               }
 
 
 
       for (int i = 0; i < x; i++)
 
               {
 
                   System.out.print("|"+arreglo[i]);
 
               }
 
 
 
       System.out.println("");
 
       System.out.println("los numeros arreglados son: ");
 
 
 
       //desde aqui va todo bien
 
 
 
        int aux;
 
        boolean cambios = false;
 
 
 
        while(true)
 
        {
 
            cambios = false;
 
            for(int i = 1; i < arreglo[i];i++)   //aqui es el primer error
 
            {
 
                if(arreglo[i]<arreglo[i-1])
 
                {
 
                    aux = arreglo[i];
 
                    arreglo[i] = arreglo[i-1];
 
                    arreglo[i-1] = aux;
 
 
 
                    cambios = true;
 
                }
 
            }
 
           if(cambios==false)
 
           {
 
               break;
 
           }
 
        }
 
 
 
            for(int i = 0; i < arreglo[i]; i++)
 
        {
 
            System.out.print("|" + arreglo[i]);
 
        }
 
            System.out.println();
 
 
 
    }

espero me puedan ayudar, y espero no infringir alguna norma de la comunidad
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: 190
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda error de arreglo java NetBeans

Publicado por preguntas (70 intervenciones) el 03/12/2016 05:56:10
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
int x = Integer.parseInt(JOptionPane.showInputDialog(null, "introduzca un número de elementos a ordenar", "Quicksort", JOptionPane.INFORMATION_MESSAGE));
 
        System.out.println("El valor ingresado es: " + x);
 
        int[] arreglo = new int[x];
 
        for (int i = 0; i < x; i++) {
 
            arreglo[i] = (int) (Math.random() * 100 + 1);
 
        }
 
        for (int i = 0; i < x; i++) {
 
            System.out.print("|" + arreglo[i]);
 
        }
 
        System.out.println("");
 
        System.out.println("los numeros arreglados son: ");
 
        //desde aqui va todo bien
        int aux;
 
        boolean cambios = false;
 
        while (true) {
 
            cambios = false;
 
            for (int i = 0; i < arreglo.length-1; i++) //aqui es el primer error
                // linea anterior: for (int i = 1; i < arreglo[i]; i++)
            {
 
                if (arreglo[i] < arreglo[i + 1]) {
                    // linea anterior: if (arreglo[i] < arreglo[i - 1]) {
 
                    aux = arreglo[i];
 
                    arreglo[i] = arreglo[i + 1];
                    // linea anterior: arreglo[i] = arreglo[i - 1];
 
                    arreglo[i + 1] = aux;
 
                    //linea anterior: arreglo[i - 1] = aux;
 
                    cambios = true;
 
                }
 
            }
 
            if (cambios == false) {
 
                break;
 
            }
 
        }
 
        for (int i = 0; i < arreglo.length; i++) {
 
            //linea anterior: for (int i = 0; i < arreglo[i]; i++) {
 
            System.out.print("|" + arreglo[i]);
 
        }
 
        System.out.println();

Reemplace las lineas erróneas y las deje como comentarios.

Tu problema esta en los bucles mas que nada. Recorres el valor de una posicion del arreglo y no el largo del arreglo como tal.

Ejemplo :

1
2
3
4
5
6
7
8
9
10
int[] num = {120, 130, 1};
        int[] num2 = new int[3];
 
        for (int i = 0; i < num[0]; i++) {
            System.out.println(i);
            //el bucle se repite 120 veces en vez de 3 (0,1,2)
            //por lo que al hacer esto:
            num2[i] = num[i];
            //Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 3 
        }

Analiza el codigo. Busca para que sirve el metodo length(), busca tambien acerca de los indices y un poco de bucles. (no me gusta el uso de while(true){})

Espero sea de 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