Foros del Web » Programación para mayores de 30 ;) » Java »

Sudoku en java

Estas en el tema de Sudoku en java en el foro de Java en Foros del Web. hola amigos estoy tratando de hacer un random con una matriz de 1-9 de modo que en la fila no se repita ningun numero e ...
  #1 (permalink)  
Antiguo 07/09/2012, 11:53
 
Fecha de Ingreso: enero-2010
Ubicación: Colombia
Mensajes: 238
Antigüedad: 14 años, 10 meses
Puntos: 2
Sudoku en java

hola amigos estoy tratando de hacer un random con una matriz de 1-9 de modo que en la fila no se repita ningun numero e igualmente en la columna.
Cuando hago el random solo con un arreglo me funciona bien pero cuando le incluyo el otro arreglo para que quede como matriz me sale un error. Dejo los dos codigos para entender mejor:

Este codigo funciona y me muestra una fila del 1 al 9 sin repetir numeros

Código:
public class sudoku1
{

public static void main (String[] args) 
{
int x[]=new int [10];
int i=1,j;
x[i]=(int)(Math.random()*10);
for(i=1;i<x.length;i++)
{
x[i]=(int)(Math.random()*10);
for(j=0;j<i;j++)
{
if(x[i]==x[j])
{
i--;
}
}
}

for(i=1;i<x.length;i++)
{
System.out.print(" "+x[i]);
}
}
}


este codigo muestra el siguiente error:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at sudoku1.main(sudoku1.java:10)

Código:
public class sudoku1
{

public static void main (String[] args) 
{
int x[][]=new int [10][10];
int i=1,j=1;
x[i][j]=(int)(Math.random()*10);
for(i=1;i<x.length;i++){
		for(j=1;j<x[i].length;j++){
			x[i][j]=(int)(Math.random()*10);
			
if(x[i][j]==x[i][j])
{
i--;
j--;
}
}
}

for(i=1;i<x.length;i++)
{
	for(j=1;j<x[i].length;j++){
System.out.print(" "+x[i][j]);
			}
		}
	}
}
  #2 (permalink)  
Antiguo 07/09/2012, 15:32
Avatar de afrika026  
Fecha de Ingreso: junio-2011
Mensajes: 85
Antigüedad: 13 años, 6 meses
Puntos: 19
Respuesta: Sudoku en java

partiendo de la base que los arrays comienzan desde el indice 0, no 1, por lo tanto si vos lo recorres desde el indice 1, en el for con la sentencia lenght, calcular el total de elementos que definistes que son 10, por lo tanto si partimos desde el 1, el bucle se pasa a 11 por lo tanto te tira ese error. Solucion: i y j tienen que valer 0, y en el "for" tenes que poner i=0 y j=0 en sus respectivos bucles.

te recomendo que nos sigas desde twitter: @fogpcmaster
  #3 (permalink)  
Antiguo 07/09/2012, 15:48
 
Fecha de Ingreso: enero-2010
Ubicación: Colombia
Mensajes: 238
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Sudoku en java

hola afrika026 gracias por tu ayuda pero la verdad no creo que ese sea el motivo del error ya que hice lo que me sugeriste y de igual forma me sigue dando el mismo error. por favor si me puedes ayudar te agradeceria mucho por que es para un trabajo de la universidad.
Ah. te busque en twitter y no me arrojo resultados para seguirte
  #4 (permalink)  
Antiguo 07/09/2012, 16:37
 
Fecha de Ingreso: junio-2008
Mensajes: 54
Antigüedad: 16 años, 5 meses
Puntos: 19
Exclamación Respuesta: Sudoku en java

Por lo que puedo ver, tu codigo decrementa los contadores i, j en la siguiente condicion:

Código:
if (x[i][j] == x[i][j])
dicha condicion siempre es verdadera, y el contador i se volvera negativo: i = -1.

Por lo tanto, al ejecutarse la sig. linea:
Código:
x[i][j] = (int) (Math.random() * 10);
i es negativo y se genera el error.
  #5 (permalink)  
Antiguo 07/09/2012, 17:11
 
Fecha de Ingreso: julio-2011
Mensajes: 11
Antigüedad: 13 años, 4 meses
Puntos: 4
De acuerdo Respuesta: Sudoku en java

Propongo lo siguiente:

Si ya tienes la manera de generar los numeros para un arreglo, crea un metodo con esas instrucciones y luego solo lo mandas llamar con los elementos del arreglo bidimensional.


Código:
public class sudoku1{
	public static void main(String[] args) {
		int x[][]=new int [10][10];
		int i = 1;
		
		x[0][0] = (int) (Math.random() * 10);
		unMetodo (x[0]);//Para cada elemento de tu arreglo bidimensional

		for (i = 0; i < (x.length ); i++) {
			System.out.print(" " + x[0][i]);
		}
	}//Fin de main
	
	private static void unMetodo (int x[]){
		int i = 1, j;
		for (i = 1; i < x.length; i++) {
			x[i] = (int) (Math.random() * 10);
			for (j = 0; j < i; j++) {
				if (x[i] == x[j]) {
					i--;
				}
			}
		}//Fin del for principal
	}
}//Fin de la clase

Etiquetas: string, sudoku
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:12.