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
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