Buenas tardes.
He iniciado a trabajar con MyOpenLab, me he encontrado con un problema y no he podido dar con el error, espero que me puedan ayudar.
El codigo del problema es el siguiente:
Exception : "Out of Bounds!" in Element : "Setter2D" Name :"2D Escribir" Application abborded!
Error in xonProcess : java.lang.ArrayIndexOutOfBoundsException: 3, 2D Escribir
Aparece al intentar desarrollar el ejercicio numero 1.10 de la guia de estudio titulada "Manejo de datos en Matrices y Tablas"
pueden encontrar el VM en el siguiente link de google drive: https://drive.google.com/open?id=1Ej-mZ9WhnVxwwOHUpuu_U_aCyy7oj4d1
Quedo atento a cualquier cualquier sugerencia y de antemano les agradezco su atencion.
Hola,
Para entender la falla primero vamos a revisar los elementos que está usando (que propiedades tienen configuradas) y el objetivo del Ejercicio.
En el ejemplo se usa un generador de números llamado "Contador Gen1" el cual está configurado para generar un número con un cierto retardo e ir incrementando hasta el límite configurado. (Si revisa estos parámetros en la sección de Propiedades verá que tiene un generador de 0 a 100000.0 que incrementa cada 100 mS).
En el ejemplo se propone tener unos arreglos de dos dimensiones (2D) para almacenar datos, el Elemento "Setter2D" lo que hace es introducir datos en ese Arreglo 2D pero en la dirección de fila y columna que entren al elemento.
Si revisamos el arreglo 2D donde va a almacenar los números de 1 a 100000.0 que es el arreglo "2D Matrix (Double)2" vemos que está configurado como 3 filas y 3 columnas, lo cual según el objetivo del ejercicio que es graficar una función seno pueden ser muy pocos valores.
Cuando inicia la ejecución y se presiona el botón "Inicio" el contador primero va a generar un valor "cero", y el elemento Setter2D va a guardar ese valor "cero" en el arreglo "2D Matrix (Double)2" en la posición Columna "cero" fila "cero", en la segunda ejecución que sería después de 100 mS, el contador va a generar un valor "Uno" y elemento Setter2D va a tratar de guardar ese valor "Uno" en el mismo arreglo "2D Matrix (Double)2" pero en la posición Columna "Cero" Fila "Uno" y así cada 100 mS hasta que al Generar un valor de Fila por ejemplo "Cuatro" que es mayor al tamaño que definió en el arreglo 2D "Matrix (Double)2" que fue de 3 Filas y 3 Columnas va a ocurrir un error (Exception : "Out of Bounds!") en el elemento Setter2D porque está tratando de ingresar un valor "Cuatro" al arreglo 2D "Matrix (Double)2" en la Columna Cero y Fila Cuatro la cual estaría fuera de el tamaño que definió para ese arreglo 2D "Matrix (Double)2" en el cual la Fila 4 no existe.
Le recomendaría cambiar el tiempo de retardo del generador de números para que incremente cada 1 segundo (1000 mS) lo cual le facilitaría ver el incremento lentamente y cambiar el tamaño de las Matrices 2D para que le quepan los datos que está generando.
Para cambiar el tamaño de esas matrices 2D debe hacerlo en la sección de propiedades en la opción "Values", ahí sale una ventana y le oprime "New" y ahí selecciona el número de filas y columnas necesarias. *Lo mismo para el otro arreglo que también está de 3Filas y 3 Columnas.
Adjunto capturas de imagen del procedimiento para cambiar el tamaño de la Matríz 2D.
Saludos,
Javier Velásquez
Excelente, mi problema era que no habia configurado correctamente la "2D Matriz (Double)1" como decias, muchas gracias!
Ahora me surge una pregunta, cada vez que termine el recorrido de por ejemplo en este caso las 360 casillas el programa se detendra y generara el mismo error, es posible generarle una parada automatica?
Hola,
Si señor, se puede detener automáticamente, lo más simple sería cambiar en el generador de números el máximo número a generar por 359 y nunca se desbordaría el arreglo.
Otra opción sería comparar el número que se va generando con los elementos comparador menor o igual y la salida se envía a un elemento "Quit Aplication" que permite detener el VM o salir totalmente.
Saludos,
Javier Velásquez