0

I'm making a sudoku game. I have an array (puzzle[][][]) containing nine other arrays (zone1[][]-zone9[][]), which each initially contain {{1,2,3},{4,5,6},{7,8,9}} (and they're assigned those values from zone1.clone(), so it's not a reference problem).

I mix these values with:

Random rand = new Random();
for(int z = 0; z < 9; z++) //cycles through zones
{
    for(int i = 0; i < 3; i++) //cycles through zone rows
    {
        for(int j = 0; j < 3; j++) //cycles through zone columns
        {
            int temp = puzzle[z][i][j];
            int newI = rand.nextInt(3);
            int newJ = rand.nextInt(3);
            puzzle[z][i][j] = puzzle[z][newI][newJ];
            puzzle[z][newI][newJ] = temp;
        }
    }
}

And then I print the puzzle to the screen by adding all the values to a char array (which adds borders). There shouldn't be any problem there, as I just add puzzle[0][0][0] through puzzle[8][2][2] separately.

So when I run the program, I expect to get nine "zones" with differently-mixed values. Instead, I get this:

/-----------------------\
| 2 1 5 | 2 1 5 | 2 1 5 |
| 6 9 8 | 6 9 8 | 6 9 8 |
| 4 3 7 | 4 3 7 | 4 3 7 |
|-------+-------+-------|
| 2 1 5 | 2 1 5 | 2 1 5 |
| 6 9 8 | 6 9 8 | 6 9 8 |
| 4 3 7 | 4 3 7 | 4 3 7 |
|-------+-------+-------|
| 2 1 5 | 2 1 5 | 2 1 5 |
| 6 9 8 | 6 9 8 | 6 9 8 |
| 4 3 7 | 4 3 7 | 4 3 7 |
\-----------------------/

I'm sure it's something simple, but I'm just not seeing it.

EDIT: Okay, here's the printing part.

char[][] display = {{'/','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\\'},
        {'|',' ',(char)('0' + puzzle[0][0][0]),' ',(char)('0' + puzzle[0][0][1]),' ',(char)('0' + puzzle[0][0][2]),' ','|',' ',(char)('0' + puzzle[1][0][0]),' ',(char)('0' + puzzle[1][0][1]),' ',(char)('0' + puzzle[1][0][2]),' ','|',' ',(char)('0' + puzzle[2][0][0]),' ',(char)('0' + puzzle[2][0][1]),' ',(char)('0' + puzzle[2][0][2]),' ','|'},
        {'|',' ',(char)('0' + puzzle[0][1][0]),' ',(char)('0' + puzzle[0][1][1]),' ',(char)('0' + puzzle[0][1][2]),' ','|',' ',(char)('0' + puzzle[1][1][0]),' ',(char)('0' + puzzle[1][1][1]),' ',(char)('0' + puzzle[1][1][2]),' ','|',' ',(char)('0' + puzzle[2][1][0]),' ',(char)('0' + puzzle[2][1][1]),' ',(char)('0' + puzzle[2][1][2]),' ','|'},
        {'|',' ',(char)('0' + puzzle[0][2][0]),' ',(char)('0' + puzzle[0][2][1]),' ',(char)('0' + puzzle[0][2][2]),' ','|',' ',(char)('0' + puzzle[1][2][0]),' ',(char)('0' + puzzle[1][2][1]),' ',(char)('0' + puzzle[1][2][2]),' ','|',' ',(char)('0' + puzzle[2][2][0]),' ',(char)('0' + puzzle[2][2][1]),' ',(char)('0' + puzzle[2][2][2]),' ','|'},
        {'|','-','-','-','-','-','-','-','+','-','-','-','-','-','-','-','+','-','-','-','-','-','-','-','|'},
        {'|',' ',(char)('0' + puzzle[3][0][0]),' ',(char)('0' + puzzle[3][0][1]),' ',(char)('0' + puzzle[3][0][2]),' ','|',' ',(char)('0' + puzzle[4][0][0]),' ',(char)('0' + puzzle[4][0][1]),' ',(char)('0' + puzzle[4][0][2]),' ','|',' ',(char)('0' + puzzle[5][0][0]),' ',(char)('0' + puzzle[5][0][1]),' ',(char)('0' + puzzle[5][0][2]),' ','|'},
        {'|',' ',(char)('0' + puzzle[3][1][0]),' ',(char)('0' + puzzle[3][1][1]),' ',(char)('0' + puzzle[3][1][2]),' ','|',' ',(char)('0' + puzzle[4][1][0]),' ',(char)('0' + puzzle[4][1][1]),' ',(char)('0' + puzzle[4][1][2]),' ','|',' ',(char)('0' + puzzle[5][1][0]),' ',(char)('0' + puzzle[5][1][1]),' ',(char)('0' + puzzle[5][1][2]),' ','|'},
        {'|',' ',(char)('0' + puzzle[3][2][0]),' ',(char)('0' + puzzle[3][2][1]),' ',(char)('0' + puzzle[3][2][2]),' ','|',' ',(char)('0' + puzzle[4][2][0]),' ',(char)('0' + puzzle[4][2][1]),' ',(char)('0' + puzzle[4][2][2]),' ','|',' ',(char)('0' + puzzle[5][2][0]),' ',(char)('0' + puzzle[5][2][1]),' ',(char)('0' + puzzle[5][2][2]),' ','|'},
        {'|','-','-','-','-','-','-','-','+','-','-','-','-','-','-','-','+','-','-','-','-','-','-','-','|'},
        {'|',' ',(char)('0' + puzzle[6][0][0]),' ',(char)('0' + puzzle[6][0][1]),' ',(char)('0' + puzzle[6][0][2]),' ','|',' ',(char)('0' + puzzle[7][0][0]),' ',(char)('0' + puzzle[7][0][1]),' ',(char)('0' + puzzle[7][0][2]),' ','|',' ',(char)('0' + puzzle[8][0][0]),' ',(char)('0' + puzzle[8][0][1]),' ',(char)('0' + puzzle[8][0][2]),' ','|'},
        {'|',' ',(char)('0' + puzzle[6][1][0]),' ',(char)('0' + puzzle[6][1][1]),' ',(char)('0' + puzzle[6][1][2]),' ','|',' ',(char)('0' + puzzle[7][1][0]),' ',(char)('0' + puzzle[7][1][1]),' ',(char)('0' + puzzle[7][1][2]),' ','|',' ',(char)('0' + puzzle[8][1][0]),' ',(char)('0' + puzzle[8][1][1]),' ',(char)('0' + puzzle[8][1][2]),' ','|'},
        {'|',' ',(char)('0' + puzzle[6][2][0]),' ',(char)('0' + puzzle[6][2][1]),' ',(char)('0' + puzzle[6][2][2]),' ','|',' ',(char)('0' + puzzle[7][2][0]),' ',(char)('0' + puzzle[7][2][1]),' ',(char)('0' + puzzle[7][2][2]),' ','|',' ',(char)('0' + puzzle[8][2][0]),' ',(char)('0' + puzzle[8][2][1]),' ',(char)('0' + puzzle[8][2][2]),' ','|'},
        {'\\','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','/'}};

for(int i = 0; i < 13; i++)
{
    for(int j = 0; j < 25; j++)
    {
        System.out.print(display[i][j]);
    }
    System.out.println();
}
  • Voting to close as this is a debugging question, but I'm not sure it belongs on StackOverflow since this is a classic example of a bug that can be found simply through proper use of a debugger. – Ixrec Aug 28 '15 at 21:24
  • It was good of you to provide the source for your board generator. You should also provide the source for your board printing algorithm. – WolfeFan Aug 28 '15 at 21:28
  • I left it out because it's very long, but basically, I add each value of puzzle[][][] individually to a 2d array of chars, along with the borders, and then print the whole array with nested for loops. I don't think the problem could be there. – Bryant Michael Young Aug 28 '15 at 21:38
  • @Ixrec, I'm afraid I just don't know how exactly I'd do that yet. – Bryant Michael Young Aug 28 '15 at 21:39
  • 1
    Just Google for some basic Java debugging tutorials. There's loads of them out there. – Ixrec Aug 28 '15 at 21:41
  • 1
    possible duplicate of [Does calling clone() on an array also clone its contents?](http://stackoverflow.com/questions/5821851/does-calling-clone-on-an-array-also-clone-its-contents) – Jules Aug 28 '15 at 23:40

2 Answers2

0

Thanks for adding your display code! I've gracefully lumped it all together like so:

import java.util.Random;

public class SudokuArray
{
    public static void main(String[] args)
    {
    new SudokuArray();
    }

    public SudokuArray()
    {
    int[][][] puzzle = {{{1,2,3},{4,5,6},{7,8,9}},
                {{1,2,3},{4,5,6},{7,8,9}},
                {{1,2,3},{4,5,6},{7,8,9}},
                {{1,2,3},{4,5,6},{7,8,9}},
                {{1,2,3},{4,5,6},{7,8,9}},
                {{1,2,3},{4,5,6},{7,8,9}},
                {{1,2,3},{4,5,6},{7,8,9}},
                {{1,2,3},{4,5,6},{7,8,9}},
                {{1,2,3},{4,5,6},{7,8,9}}};
    Random rand = new Random();
    for(int z = 0; z < 9; z++) //cycles through zones
    {
        for(int i = 0; i < 3; i++) //cycles through zone rows
        {
        for(int j = 0; j < 3; j++) //cycles through zone columns
        {
            int temp = puzzle[z][i][j];
            int newI = rand.nextInt(3);
            int newJ = rand.nextInt(3);
            puzzle[z][i][j] = puzzle[z][newI][newJ];
            puzzle[z][newI][newJ] = temp;
        }
        }
    }
    char[][] display = {{'/','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\\'},
                {'|',' ',(char)('0' + puzzle[0][0][0]),' ',(char)('0' + puzzle[0][0][1]),' ',(char)('0' + puzzle[0][0][2]),' ','|',' ',(char)('0' + puzzle[1][0][0]),' ',(char)('0' + puzzle[1][0][1]),' ',(char)('0' + puzzle[1][0][2]),' ','|',' ',(char)('0' + puzzle[2][0][0]),' ',(char)('0' + puzzle[2][0][1]),' ',(char)('0' + puzzle[2][0][2]),' ','|'},
                {'|',' ',(char)('0' + puzzle[0][1][0]),' ',(char)('0' + puzzle[0][1][1]),' ',(char)('0' + puzzle[0][1][2]),' ','|',' ',(char)('0' + puzzle[1][1][0]),' ',(char)('0' + puzzle[1][1][1]),' ',(char)('0' + puzzle[1][1][2]),' ','|',' ',(char)('0' + puzzle[2][1][0]),' ',(char)('0' + puzzle[2][1][1]),' ',(char)('0' + puzzle[2][1][2]),' ','|'},
                {'|',' ',(char)('0' + puzzle[0][2][0]),' ',(char)('0' + puzzle[0][2][1]),' ',(char)('0' + puzzle[0][2][2]),' ','|',' ',(char)('0' + puzzle[1][2][0]),' ',(char)('0' + puzzle[1][2][1]),' ',(char)('0' + puzzle[1][2][2]),' ','|',' ',(char)('0' + puzzle[2][2][0]),' ',(char)('0' + puzzle[2][2][1]),' ',(char)('0' + puzzle[2][2][2]),' ','|'},
                {'|','-','-','-','-','-','-','-','+','-','-','-','-','-','-','-','+','-','-','-','-','-','-','-','|'},
                {'|',' ',(char)('0' + puzzle[3][0][0]),' ',(char)('0' + puzzle[3][0][1]),' ',(char)('0' + puzzle[3][0][2]),' ','|',' ',(char)('0' + puzzle[4][0][0]),' ',(char)('0' + puzzle[4][0][1]),' ',(char)('0' + puzzle[4][0][2]),' ','|',' ',(char)('0' + puzzle[5][0][0]),' ',(char)('0' + puzzle[5][0][1]),' ',(char)('0' + puzzle[5][0][2]),' ','|'},
                {'|',' ',(char)('0' + puzzle[3][1][0]),' ',(char)('0' + puzzle[3][1][1]),' ',(char)('0' + puzzle[3][1][2]),' ','|',' ',(char)('0' + puzzle[4][1][0]),' ',(char)('0' + puzzle[4][1][1]),' ',(char)('0' + puzzle[4][1][2]),' ','|',' ',(char)('0' + puzzle[5][1][0]),' ',(char)('0' + puzzle[5][1][1]),' ',(char)('0' + puzzle[5][1][2]),' ','|'},
                {'|',' ',(char)('0' + puzzle[3][2][0]),' ',(char)('0' + puzzle[3][2][1]),' ',(char)('0' + puzzle[3][2][2]),' ','|',' ',(char)('0' + puzzle[4][2][0]),' ',(char)('0' + puzzle[4][2][1]),' ',(char)('0' + puzzle[4][2][2]),' ','|',' ',(char)('0' + puzzle[5][2][0]),' ',(char)('0' + puzzle[5][2][1]),' ',(char)('0' + puzzle[5][2][2]),' ','|'},
                {'|','-','-','-','-','-','-','-','+','-','-','-','-','-','-','-','+','-','-','-','-','-','-','-','|'},
                {'|',' ',(char)('0' + puzzle[6][0][0]),' ',(char)('0' + puzzle[6][0][1]),' ',(char)('0' + puzzle[6][0][2]),' ','|',' ',(char)('0' + puzzle[7][0][0]),' ',(char)('0' + puzzle[7][0][1]),' ',(char)('0' + puzzle[7][0][2]),' ','|',' ',(char)('0' + puzzle[8][0][0]),' ',(char)('0' + puzzle[8][0][1]),' ',(char)('0' + puzzle[8][0][2]),' ','|'},
                {'|',' ',(char)('0' + puzzle[6][1][0]),' ',(char)('0' + puzzle[6][1][1]),' ',(char)('0' + puzzle[6][1][2]),' ','|',' ',(char)('0' + puzzle[7][1][0]),' ',(char)('0' + puzzle[7][1][1]),' ',(char)('0' + puzzle[7][1][2]),' ','|',' ',(char)('0' + puzzle[8][1][0]),' ',(char)('0' + puzzle[8][1][1]),' ',(char)('0' + puzzle[8][1][2]),' ','|'},
                {'|',' ',(char)('0' + puzzle[6][2][0]),' ',(char)('0' + puzzle[6][2][1]),' ',(char)('0' + puzzle[6][2][2]),' ','|',' ',(char)('0' + puzzle[7][2][0]),' ',(char)('0' + puzzle[7][2][1]),' ',(char)('0' + puzzle[7][2][2]),' ','|',' ',(char)('0' + puzzle[8][2][0]),' ',(char)('0' + puzzle[8][2][1]),' ',(char)('0' + puzzle[8][2][2]),' ','|'},
                {'\\','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','/'}};

    for(int i = 0; i < 13; i++)
    {
        for(int j = 0; j < 25; j++)
        {
        System.out.print(display[i][j]);
        }
        System.out.println();
    }
    }
}

And the output looks like:

$ java SudokuArray
/-----------------------\
| 4 1 2 | 6 2 3 | 1 6 7 |
| 5 6 7 | 9 4 8 | 2 5 3 |
| 9 8 3 | 5 1 7 | 8 4 9 |
|-------+-------+-------|
| 3 4 2 | 5 2 3 | 3 1 5 |
| 7 8 5 | 4 6 1 | 7 4 9 |
| 9 6 1 | 8 9 7 | 6 2 8 |
|-------+-------+-------|
| 5 6 1 | 6 5 8 | 8 1 7 |
| 9 3 8 | 3 9 2 | 5 2 3 |
| 2 4 7 | 4 7 1 | 9 4 6 |
\-----------------------/

So, your code snippets do their job (although the resulting board is not valid for Sudoku). The problem lies elsewhere.

WolfeFan
  • 1,447
  • 7
  • 9
0

This solution takes just one random value and one loopto startup with the puzzle generation.

    for(byte r = zero, c; nine > r; r ++) {
        if(three == r || six == r) {
            rand = maze[r - three][zero];
            rand = nine == rand ? one : (byte)(rand + one);
        } else {
            rand = zero < r ? maze[r - one][six] : rand;
        }
        for(c = zero; nine > c; c ++) {
            maze[r][c] = rand;
            rand = nine == rand ? one : (byte)(rand + one);
        }
    }

This my github repository link: Full code

Live Demo