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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Temas
Páginas: [1]
1  Programación / Java / Codigo para crear SUDOKUS en: 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



Código:
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;
    }
}
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines