elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Píldoras formativas en seguridad de la información


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java (Moderadores: Debci, Leyer)
| | | |-+  Ayuda con este código del juego Sodoku
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con este código del juego Sodoku  (Leído 269 veces)
Curi0s0

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Ayuda con este código del juego Sodoku
« en: 12 Junio 2018, 17:36 »

Buenos días, si alguien me puede dar una sugerencia o donde esta fallando el código, por que aveces me muestra resultado y otras veces no me muestra nada. Bueno si me los muestra pero no de la forma que tenía en mente. Lo que trato de hacer es básicamente generar números aleatorios [1-9], de tal manera que no se repitan ni en la fila ni en la columna. Por le momento solo quiero que haga eso el código. Ya que le falta implementar al código una tercera condición o regla. Mas abajo les dejo  los resultados que me genera el código, uno donde me muestra el resultado como debería de ser, y en la otra un tanto raro.
Aclaro que no llevo mucho tiempo programando y desde hace poco me estoy iniciando en el mundo de la programación. Desde ya Gracias por sus sugerencias o ayuda que me puedan brindar.
Aquí el código.


package Sodoku;

public class Sodoku {

   public static void main(String[] args)
   {
      String caracter;
      int[][] V=new int[9][9];
      int m;
      int k;
      int i, j;
      
      for(i=0; i<3; i++)//Lo puse en 3 nomas para ver su funcionamiento de "i".
      {
         System.out.println(i);//Para ver que valor me toma i.Como aveces  me muestra el resultado y otras veces no, quería ver el funcionamineto  de "i".
         j=0;
         while(j<9)
         {
            System.out.println(j); //Solo para ver que valor toma j. Como aveces  me muestra el resultado y otras veces no, quería ver el funcionamiento  de  "j
            V[j]=(int)(Math.random()*9)+1;
            //Esta instrucción solo está, por que quería ver que valores me generaba el random.
            System.out.println("["+i+"]["+j+"]: "+V[j]);
            
            caracter="a";
            //Con este for avanzo una posición en la fila con respecto a la ubicación de la posición actual.
            for( k=0; k<j && caracter=="a"; k++)
            {
               /*Compara el valor generado por random con los valores que se encuentran antes y que están en esa fila. Si entra al if. significa que el valor generado por random coincide con otro valor de esa fila por lo
 cual la variable caracter cambia de valor, por lo que sale del for,y vuelve al inicio de while para generar un nuevo valor en la misma posicion con random.*/
               if(V[j]==V[k])
               {
                  
                  caracter="b";
               }         
            }
            /*Si entra a este if, significa que el valor generado por random no coincidió con ninguno de los valores
              en la fila donde se ubica*/
            if(caracter=="a")
            {
               //Con este for avanzo una posición en la columna con respecto a la ubicación de la posición actual.
               for(m=0;m<i && caracter=="a";m++)
               {
                  /*Empieza a Comparar el valor generado por random con los valores que se encuentran antes y que están en esa columna. Si en algún momento entra al if, sale del
                  for, por lo que vuelve al inicio de while para generar un nuevo valor en la misma posición*/
                  if(V[j]==V[m][j])
                  {
                     
                     caracter="b";
                  }
               }
               /*Si caracter es igual a "a" quiere decir que nunca entró a los if anteriores,por lo que "j" sube en 1, para nuevamente generar un nuevo valor con random en la nueva posición*/
               if(caracter=="a")
               {
                  j++;
               }
            }
         }         
      }
            
      
      
      for(i=0; i<9; i++)
      {
         for(j=0; j<9; j++)
         {
            System.out.print(V[j] + " ");
         }
         System.out.println();
         
      }
      
   }
   
}


Aquí los resultados:
Resultado como debería de ser.
Este resultado es por los que imprime las posiciones de "i" i "j", como ambos los inicié en cero, entonces comienzan con el valor de cero, y con random los valores que me genera en cada posición.

0
0
[ 0][0]: 8
1
[ 0][1]: 9
2
[ 0][2]: 1
3
[ 0][3]: 3
4
[ 0][4]: 6
5
[ 0][5]: 6
5
[ 0][5]: 7
6
[ 0][6]: 9
6
[ 0][6]: 2
7
[ 0][7]: 7
7
[ 0][7]: 6
7
[ 0][7]: 7
.
.
.continua...

Al final el resultado es:
8 9 1 3 6 7 2 4 5
1 2 6 8 9 5 4 3 7
4 1 7 2 5 9 6 8 3
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0


Resultado un tanto raro:
Aquí mi pregunta es: ¿Por que el "i" toma el valor de 2 y "j" el valor de 8?
Si a ambos los inicié con el valor de ceros; pero de frente toman esos valores mencionados. este resultado no se detiene, tengo que darle a detener manualmente.

[2][8]: 7
8
[2][8]: 8
8
[2][8]: 4
8
[2][8]: 2
8
[2][8]: 7
8
[2][8]: 8
8
[2][8]: 9
8
[2][8]: 6
8
[2][8]: 2
8
.
.
. continua


En línea

Curi0s0

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Ayuda con este código del juego Sodoku
« Respuesta #1 en: 14 Junio 2018, 03:26 »

Bueno Amigos, ya resolví el problema que tenía y también ya terminé de implementar el código :) :). Solo que demora en sacar el resultado final.

package Sodoku;

public class Sodoku {

   public static void main(String[] args)
   {
      String caracter="a";
      int[][] V=new int[9][9];
      int m;
      int k;
      int i, j;
      int x=0,y=0;
      
      
      for(i=0; i<9 ; i++)
      {
         for(j=0; j<9; j++)
         {
            caracter="a";
            V[j]=(int)(Math.random()*9)+1;
            if(i<3 && j<3)
            {
               x=0;
               y=0;
            }
            else if(i<3 && j<6)
            {
               x=0;
               y=3;
            }
            else if(i<3 && j<9)
            {
               x=0;
               y=6;
            }
            else if(i<6 && j<3)
            {
               x=3;
               y=0;
            }
            else if(i<6 && j<6)
            {
               x=3;
               y=3;
            }
            else if(i<6 && j<9)
            {
               x=3;
               y=6;
            }
            else if(i<9 && j<3)
            {
               x=6;
               y=0;
            }
            else if(i<9 && j<6)
            {
               x=6;
               y=3;
            }
            else if(i<9 && j<9)
            {
               x=6;
               y=6;
            }
               
               
            for(m=x; m<x+3; m++)
            {
               for(int n=y; n<y+3; n++)
               {
                  if(i==m && j==n)
                  {
                     caracter="c";
                     break;
                  }
                  else if(V[j] == V[m][n])
                  {
                     caracter="b";
                     break;
                  }
               }
               if(caracter=="c")
               {
                  break;
               }
               else if(caracter=="b")
               {
                  j=-1;
                  break;
               }
            }                  
               
            if(caracter=="c")
            {
               for( k=0; k<j && caracter=="c"; k++)
               {
                  if(V[j]==V[k])
                  {            
                     caracter="b";
                  }         
               }
               if(caracter=="b")
               {
                  i--;
                  break;
               }
            }
            
            if(caracter=="c")
            {
               for(m=0;m<i && caracter=="c";m++)
               {
                  if(V[j]==V[m][j])
                  {
                     caracter="b";
                  }
               }
            }
               
            if(caracter=="b")
            {
               i--;
               break;
            }   
         }
      }
      
      for(i=0; i<9; i++)
      {
         if(i%3==0 && i!=0)
         {
            System.out.println();
         }
         for(j=0; j<9; j++)
         {
            if(j%3==0 && j!=0)
            {
               System.out.print(" ");
            }
            System.out.print(V[j] + " ");   
         }   
         System.out.println();
      }
   }
}

Resultados

1er Resultado
8 4 2  3 7 1  5 9 6
9 6 7  2 4 5  1 3 8
3 5 1  8 9 6  7 2 4

1 8 4  9 2 3  6 5 7
2 7 5  1 6 8  3 4 9
6 9 3  7 5 4  2 8 1

4 3 6  5 8 7  9 1 2
5 2 8  6 1 9  4 7 3
7 1 9  4 3 2  8 6 5

2do Resultado
1 8 5  4 3 9  7 2 6
2 9 7  1 6 5  3 8 4
6 3 4  7 2 8  5 1 9

7 2 9  6 1 3  4 5 8
3 6 8  5 4 2  9 7 1
4 5 1  8 9 7  6 3 2

9 4 2  3 7 1  8 6 5
5 1 3  9 8 6  2 4 7
8 7 6  2 5 4  1 9 3


En línea

Curi0s0

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Ayuda con este código del juego Sodoku
« Respuesta #2 en: 14 Junio 2018, 03:36 »

En las partes donde esta V[j]  es V[ i][j]  ,, raro que no se haya copiado esa parte xd
En línea

NEBIRE


Desconectado Desconectado

Mensajes: 1.188


Ver Perfil
Re: Ayuda con este código del juego Sodoku
« Respuesta #3 en: 14 Junio 2018, 22:19 »

En el siguiente hilo, el año pasado, traté el problema de los sudokus a fondo...

https://foro.elhacker.net/java/codigo_para_crear_sudokus-t472924.0.html

Sin compilar, en mi viejo tablet, generar un sudoku al azar, demoraba menos de 1 segundo...
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[ayuda] ando buscando un sodoku en flash solo el .Fla para ver el codigo
Diseño Gráfico
Red Mx 2 892 Último mensaje 3 Junio 2007, 23:40
por Red Mx
Ayuda a desinstalar este juego
Juegos y Consolas
Huemulito 2 671 Último mensaje 17 Diciembre 2007, 22:48
por Huemulito
ayuda plis en este juego en c
Programación C/C++
chivis cristian 0 3,580 Último mensaje 15 Diciembre 2011, 04:54
por chivis cristian
AYUDA CON CODIGO DE JUEGO DE CARTAS
Ejercicios
kasidy 2 3,261 Último mensaje 26 Noviembre 2013, 16:00
por kasidy
Ayuda con codigo de juego del gato C++
Programación C/C++
carlangasds 0 667 Último mensaje 6 Noviembre 2014, 04:04
por carlangasds
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines