Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Editame

#1
Java / Codigo para crear SUDOKUS
28 Julio 2017, 22:27 PM
Hola amigos que tal, bueno soy nuevo por aca y no se si este en el lugar equivocado y si es asi pido disculpas a los moderadores y pido redireccionamiento del tema al hilo indicado donde pueda encontrar la ayuda que necesito.

Bueno mi inconveniente es el siguiente:
- Estoy realizando un sudoku parte de un proyecto de la Universidad y necesito ayuda con el codigo que genera la matriz aleatoriamente, he creado tres funciones para verificar si existe el dato en la fila, columna o cuadrante al parecer todo esta bien pero al correrlo entra en un bucle infinito, al realizar algunas pruebas de escritorio me encontre que sin tener error en el codigo llega a un punto que en la inserccion de los datos no se da ya que no encuentra ningun numero valido a ingresar, en fin dejo el codigo y ya sabran de lo que le hablo


adjunto una imagen en una prueba de escritorio que iba haciendo tomado de la consola y muestra hasta donde llega la matriz y que en los valores validos a ingresar no se puede por esa razon sigue evaluando infinitamente




package Clases;
import java.util.Random;
public class Metodos {
   static Random ran = new Random();
   static int matriz [][] = new int [9][9];

   public static void main(String[] args) {
       generadorAleatorio();
   }
   
   public static void generadorAleatorio (){
       int i=0,j;
       
       while (i < 9){
           System.out.println("fila:  " + i);
           j = 0;
           while (j < 9){
               System.out.println("Columna" + j);
               int numero = 1 + ran.nextInt(9);
               System.out.println(numero);
               System.out.println(busquedaFilas(numero, i));
               if (busquedaFilas(numero, i).equalsIgnoreCase("no")) {
                   
                   System.out.println(busquedaColumnas(numero, j));
                   if (busquedaColumnas(numero, j).equalsIgnoreCase("no")) {
                       
                       System.out.println(busquedaCaja(numero, i, j));
                       if (busquedaCaja(numero, i, j).equalsIgnoreCase("no")) {
                           
                           matriz[i][j] = numero;
                           System.out.println(numero + "Valido");
                           j++;
                       }
                   }
               }
           }
           i++;
       }
       for (int k = 0; k < 9; k++) {
           System.out.println("");
           for (int l = 0; l < 9; l++) {
               System.out.print(matriz[k][l] + "\t");
           }
       }
       
   }
   
   public static String busquedaFilas (int valor, int filas) {
       
       String resultado = "no";
       for (int i = 0; i < 9; i++) {
           if (valor == matriz[filas][i]) {
               resultado = "si";
               break;
           }
       }
       return resultado;
   }
   
   public static String busquedaColumnas (int valor, int columnas) {
       
       String resultado = "no";
       for (int i = 0; i < 9; i++) {
           if (valor == matriz[i][columnas]) {
               resultado = "si";
               break;
           }
       }
       return resultado;
   }
   
   public static String busquedaCaja (int valor, int filas, int columnas) {
       
       int minfila, maxfila;
       int mincolum, maxcolum;
       
       if (filas >= 0 && filas < 3) {
           minfila = 0;
           maxfila = 2;
       }else if (filas >= 3 && filas < 6) {
           minfila = 3;
           maxfila = 5;
       }else {
           minfila = 6;
           maxfila = 8;
       }    
       
       if (columnas >= 0 && columnas < 3) {
           mincolum = 0;
           maxcolum = 2;
       }else if (columnas >=3 && columnas <6) {
           mincolum = 3;
           maxcolum = 5;
       }else{
           mincolum = 6;
           maxcolum = 8;
       }
             
       String resultado = "no";
       
       for (int i = minfila; i <= maxfila ; i++) {
           for (int j = mincolum; j <= maxcolum; j++) {
               if (valor == matriz[i][j]) {
                   resultado = "si";
                   break;
               }
           }
       }
       return resultado;
   }
}