SHARE
TWEET

Sudoku - 9x9 Field Generator (Full of Bugs)

KormosAdam Oct 14th, 2019 (edited) 86 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.awt.Container;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.Random;
  5.  
  6. public class Sudoku {
  7.    
  8.     static int[][] grid = new int[9][9];
  9.     static int[] colArr = new int[grid.length];
  10.     static int[] currentArr = new int[grid.length];
  11.     static int neededSum = 45;
  12.     static Random rand = new Random();
  13.    
  14.     public static void main(String[] args)
  15.     {
  16.         do {
  17.             Calculate();
  18.         }while(!ContainsEvery(3));
  19.         //GenerateRand(grid[0], 0);
  20.         DrawTable();
  21.     }
  22.  
  23.     private static void Calculate(){
  24.         for(int i = 0; i < grid.length; i++) {
  25.             // Innen a while eltávolítása jó ötlet lehet
  26.             while(!ContainsAll(grid[i])) GenerateRand(grid[i], i);
  27.         }
  28.     }
  29.    
  30.     static void GenerateRand(int[] current, int rowNum){
  31.         for(int i = 0; i < current.length; i++) {
  32.             current[i] = rand.nextInt(grid.length) + 1;
  33.             colArr[i] = rand.nextInt(grid.length) + 1;
  34.         }
  35.         //if(!ContainsAll(current) || !ContainsAll(colArr))  {
  36.             //GenerateRand(current, rowNum);
  37.         //}
  38.         //if(!ContainsAll(colArr)) GenerateRand(current, rowNum);
  39.         //else {
  40.             for(int i = 0; i < colArr.length; i++) {
  41.                 grid[i][rowNum] = colArr[i];
  42.             }
  43.         //}
  44.             if(!ContainsAll(current)) GenerateRand(current, rowNum);
  45.     }
  46.    
  47.     private static int[][] SetBoard() {
  48.         int[][] test = new int[grid.length][grid.length];
  49.         for(int[] currentArr : test) {
  50.             for(int i = 0; i < currentArr.length; i++) {
  51.                 currentArr[i] = rand.nextInt(grid.length+1);
  52.             }
  53.         }
  54.         return test;
  55.     }
  56.  
  57.     private static boolean ContainsEvery(int num) {
  58.         int counter = 0;
  59.         int currCol = 0;
  60.         for(int i = 0; i < grid.length; i++) {
  61.             if(ContainsAll(grid[i])) counter++;
  62.         }
  63.         for(int j = 0; j < grid.length && currCol < grid.length; j++) {
  64.             currentArr[j] = grid[j][currCol];
  65.             if(j == grid.length-1) {
  66.                 if(ContainsAll(currentArr)) {
  67.                     counter++;
  68.                     if(currCol < grid.length-1) {
  69.                         currCol++;
  70.                         j = 0;
  71.                     }
  72.                 }
  73.             }
  74.         }
  75.         return (counter >= num) ? true : false;
  76.     }
  77.  
  78.     private static void DrawTable() {
  79.         for(int i = 0; i < grid.length; i++) {
  80.             System.out.println(Arrays.toString(grid[i]));
  81.         }
  82.     }
  83.    
  84.     private static Boolean ContainsAll(int[] a) {
  85.         int sum = 0;
  86.         for(int curr : a) {
  87.             sum += curr;
  88.         }
  89.         if(sum == neededSum) {
  90.            
  91.             for(int i = 0; i < a.length; i++) {
  92.                 for(int j = 0; j < a.length; j++) {
  93.                     if(a[i] == a[j] && i != j) {
  94.                         return false;
  95.                     }
  96.                 }
  97.             }
  98.            
  99.             return true;
  100.         }
  101.         return false;
  102.     }
  103. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top