Ver Mensaje Individual
  #5 (permalink)  
Antiguo 25/01/2015, 00:03
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: recorrido caballo

Hola,

Lo que no me queda claro a mi en lo personal, es ¿cual es tu pregunta específicamente? Hasta ahora que mostraste tu segundo mensaje creo que posiblemente lo que deseas es optimizar el código.

Posiblemente te pueda ser de alguna ayuda ...

Primero, en tu código en lenguaje C se produce un ciclo infinito por lo cual no pude probar que realmente funcionara y que me mostrara por lo menos algún resultado.

Código:
 for (i = 0; i == 0;)
	{
		intento++;
		if (llamar(posicionH, posicionV, intento) == 1)
		{
			intento = 0;
		}
	}
Ahora, en tu código Java, después de un par de minutos sin que mostrara ningún resultado me aburrí y detuve el proceso. Pero aún así pude observar que aproximadamente la mitad del tiempo lo consume el try/catch. Se producen tantos ArrayIndexOutOfBoundsException que la mayor parte del tiempo en esa sección del código.

Código:
				try 
				{
					if (Tablero[posicionH + horizontal[siguiente_mov]][posicionV + vertical[siguiente_mov]] == 0)
					{
						Tablero[posicionH][posicionV] = movimientos;
						
...					}
				}
				catch(ArrayIndexOutOfBoundsException e)
				{
					
				}
Ahora, ¿que significa esto?

Java tiene un mecanismo de try/catch como C++, pero C no tiene ningún mecanismo de este tipo, el equivalente de un ArrayIndexOutOfBoundsException en C es nada, es decir, en C posiblemente estoy escribiendo en un area de la memoria inválida y ni cuenta me voy a dar por la misma naturaleza del lenguaje C. En el mejor de los casos voy a obtener un Invalid Address Write. Pero ese try/catch tiene su precio en la velocidad del código que procesa.

Hay tres tipos de errores en programación, el primero y el mas fácil de descubrir es el error sintáctico, es cuando escribes mal el wihle{} o el fro{} y el compilador muestra error (en tu código no se encuentran de este tipo de errores). El segundo tipo es el error lógico, es por el ejemplo cuando el resultado de una operación tira una división entre 0, y al correr el programa se detiene porque encuentra algún error (en tu código pareciera que no hay muchos errores de este tipo, solo ArrayIndexOutOfBoundsException, que aunque no lo creas son errores, el try/catch no es una solución a que tus indices no los calculaste bien).

El tercer tipo es el mas complicado, es que no hay errores sintácticos ni lógicos, pero tu programa no hace lo que debe hacer, no logra el resultado esperado, puede ser que se ejecute pero no funciona porque no logra el fin que se espera.

Al parecer en tu código si está sucediendo eso, tanto en C (ciclo infinito) como en Java (ArrayOutOfBoundsException). Primero corrige eso, cuando tu programa haga lo que tiene que hacer entonces preocúpate que lo haga rápido, de otra forma no tiene sentido. No sirve de nada que tu programa corra a la velocidad de la luz si no logra el resultado esperado.

Saludos,