0 votos
por (60 puntos) en Java
hola gente estoi aprendiendo a programar en java , y tengo que implementar el juego del sudoku ,pero me e quedado atascado.A la ora de insertar un elemento  compruebo q ese elemento no esta en la fila q lo quiero insertar , ni en la columna , ni en el subcuadro correspondiente ,e aqui mi duda,como puedo saber donde empieza el subcuadro (son conocidas la longitud de los subcuadros) ,nose si me explico.

yo lo intente de esta forma

<pre lang='java'>private boolean comprobarSubTableros(int fila,int columna,int elemento ){
       boolean existe=false;
       int posIniX=fila-(fila%subTableroX);//calculo la posicion inicial del subtablero en la fila
       int posIniY=columna-(columna%subTableroY);//posicion inicial del subtablero en la columna
       //recorremos el  subtablero en busca de algun elemento repetido
       for(int h=posIniX;h<posIniX+subTableroX;h++ )
           for(int n=posIniY;n<posIniY+subTableroY;n++){
               if(tablero[h][n])==elemento) existe=true ;
           }
       return existe;
}
subTableroX es el numero de filas q tien el subtanblero es decir su longitud y es conocido

el problema es que si la fila es 1 y el subtableroX vale 3 el modulo 1%3 deberia ser 1 lo cual deberia funcionar pero me da error seguramente xq el dividendo es menor q el divisor y asi estamos q nose como calcular la posicon del subtablero


2 Respuestas

0 votos
por (8.5k puntos)
Buenas,

No he entendido muy bien, lo que intentas explicar, ni lo que pretendes hacer en el código con el uso del operador de módulo (%), pero básicamente para saber en que subCuadrante del Sudoku estás y recorrerlo en busca de un valor, yo utilizaría una función tal que así:


    private static boolean comprobarSubTableros(int fila,int columna,int elemento){
           int subTableroX = 3;
           int subTableroY = 3;
           int[][] tablero = new int[9][9];
           int cuadroX=fila/subTableroX;
           int cuadroY=columna/subTableroY;
           int posIniX=cuadroX * subTableroX;//calculo la posicion inicial del subtablero en la fila
           int posIniY=cuadroY * subTableroY;//posicion inicial del subtablero en la columna
           //recorremos el  subtablero en busca de algun elemento repetido
           for(int h=posIniX;h<posIniX+subTableroX;h++ )
               for(int n=posIniY;n<posIniY+subTableroY;n++){
                   if(tablero[h][n]==elemento)
                   {
                       return true;
                   }
               }
           return false;
    }

Espero que te sirva


0 votos
por (60 puntos)
Perfecto eso era lo q estaba buscando ,gracias Torres y perdona por la explicacion q ya se q me lie un poco


Preguntas relacionadas

0 votos
0 respuestas
preguntado por domialex (20 puntos) Ene 28, 2016 en Java
0 votos
0 respuestas
preguntado por crazyzero (40 puntos) Ene 28, 2016 en Java
0 votos
8 respuestas
Bienvenido a Dudas de Programación, donde puedes hacer preguntas y recibir respuestas sobre los problemas más frecuentes de los lenguajes de programación, frameworks de desarrollo y bases de datos que utilices. Foro de Línea de Código

Categorías

...