首页 文章

使用二维数组帮助Java Sudoku Permuter程序?

提问于
浏览
0

我必须创建一个程序,将数据的9行显示为9个9位数字,然后提示用户对数独进行6次操作之一 . 然后我们必须在每次用户执行操作时输出数独 . 这是一个如何运行的示例运行:

Welcome to Sudoku Permuter.

   C C C C C C C C C
   1 2 3 4 5 6 7 8 9
R1 0 8 0 4 0 2 0 6 0
R2 0 3 4 0 0 0 9 1 0
R3 9 6 0 0 0 0 0 8 4
R4 0 0 0 2 1 6 0 0 0
R5 2 0 0 0 0 9 6 0 0
R6 0 1 0 3 5 7 0 0 8
R7 8 4 0 0 0 0 0 7 5
R8 0 2 6 0 0 0 1 3 0
R9 0 9 0 7 0 1 0 4 0

(0 denotes a blank)

Enter 1 to swap two rows in a panel
Enter 2 to swap two columns in a panel
Enter 3 to swap two row panels
Enter 4 to swap two column panels
Enter 5 to swap two numbers
Enter 0 to end:

假设用户输入3(交换两个行面板) . 这会出现:

Enter row panels (1-3) to swap: 3 1

它将交换行面板1和3,这将是输出:

C C C C C C C C C
   1 2 3 4 5 6 7 8 9
R1 8 4 0 0 0 0 0 7 5
R2 0 2 6 0 0 0 1 3 0
R3 0 9 0 7 0 1 0 4 0
R4 0 0 0 2 1 6 0 0 0
R5 2 0 0 0 0 9 6 0 0
R6 0 1 0 3 5 7 0 0 8
R7 0 8 0 4 0 2 0 6 0
R8 0 3 4 0 0 0 9 1 0
R9 9 6 0 0 0 0 0 8 4

Rows 1-3 have been switched with rows 7-9.

假设用户输入5.这就出现了:

Enter two numbers: 2 8

原来的数独再次输出,除了2和8都被切换 .

C C C C C C C C C
   1 2 3 4 5 6 7 8 9
R1 0 2 0 4 0 8 0 6 0
R2 0 3 4 0 0 0 9 1 0
R3 9 6 0 0 0 0 0 2 4
R4 0 0 0 8 1 6 0 0 0
R5 8 0 0 0 0 9 6 0 0
R6 0 1 0 3 5 7 0 0 2
R7 2 4 0 0 0 0 0 7 5
R8 0 8 6 0 0 0 1 3 0
R9 0 9 0 7 0 1 0 4 0

如果用户输入1,则会出现一些问题

Enter two rows (1-9) to switch:

无论用户输入哪一行,都会交换这两行,并再次输出数独 . 如果用户输入2,则类似,除了将切换2列 . 类似地,如果用户输入4,则将切换两个列面板 .

我们应该使用这样的二维数组:

int [] [] sudoku = new int[10] [10]

我不知道该怎么做 . 我整个学期都在苦苦挣扎,这是我的第一个编程课 . 我根本不理解数组,我不明白我们甚至应该首先显示数据 . 这个问题不在我们的书中,所以我也没有什么可以回头看的 . 我真的需要通过这门课 . 如果有人能帮助我,我真的很感激 . 试着让它易于理解,有很多东西我还没学会怎么做(例如:记录,idk是什么parseInt) . 我试过读这本书(好几次) . 它有些帮助,但这个程序是不可能的 . 非常感谢你的帮助 .

2 回答

  • 2
    • 你知道如何阅读输入吗?

    • 您知道如何使用1维数组(列表),如{1,2,3,4,5}吗?

    • 你了解循环吗?

    • 阵列概念的哪一部分对你来说很难?

    例如,这是一段代码,它只打印出数组的原始内容 . 这段代码有意义吗?

    int [] [] sudoku = new int[10] [10];
    // loop through all of the rows
    for (int row = 0; row < 10; row++) {
        // loop through all columns for each row
        for (int column = 0; column < 10; column++) {
            // print out the sudoku value at that row and column
            System.out.print(sudoku[row] [column] + " ");
        }
        // at the end of the row, print a blank line to start the next row
        System.out.println();
    }
    

    以下是您可以对示例板进行硬编码以使用它的方法:

    int [] [] sudoku = new int [] [] {
        { 0, 8, 0, 4, 0, 2, 0, 6, 0 },
        { 0, 3, 4, 0, 0, 0, 9, 1, 0 },
        etc.
    }
    

    这是一些用于交换两行的伪代码 .

    Get first row # from user
    Get second row # from user
    Loop through each column in the board
        Swap(cell at first row #, current column, cell at second row #, current column)
    End Loop
    

    交换基本上需要一个临时变量来在交换时保存其中一个值:

    Swap(a, b)
        Store a into Temp
        Store b into a
        Store Temp into b
    
  • 0

    正如mellamokb的评论所说,将事情分解成部分是诀窍 . 乍一看,我可能会这样做:

    • 在数独板中的硬编码,并制作例程以打印出板

    • 一旦这种方法正常,那么你就选择了'd need a menu. So extend your program to make a little menu that prints back the user',而不做其他任何事情

    • 一旦开始,您就可以开始填写菜单选项了 . 因此,当用户选择选项1时,请使用例程来交换两行 . 其他菜单项仍然可以打印出他们的号码 .

    一旦你有了这个工作,你实际上差不多完成了 . 你可以从#3开始你的日常工作,并通过小的改动复制它,以便进行其他4次修改 .

    你没有提到数独板的来源 . 如果它是硬编码的,那么你已经完成了 . 如果没有,那么你只需要制作那种方法 . 此时,您已经知道可以正确打印电路板,显示菜单和更换电路板 .

    你提到了数组的问题,它们可能有点飞跃 . 您是否有关于阵列的具体问题,我们可以提供帮助?它们就像编程中的其他东西一样 . 你开始不了解它们,只是按照你在其他地方找到的指导和代码 . 随着你获得更多的经验(正如你将在这个项目和未来的项目中所做的那样),它们会变得不那么神秘并且更有意义,直到有一天它们变得像3 7一样简单 .

相关问题