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

使用二维数组的Java数独Permuter程序的帮助?,java,arrays,sudoku,Java,Arrays,Sudoku,我必须创建一个程序,将数独的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

我必须创建一个程序,将数独的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)。这本书我试着读了(好几次)。它帮助了一些人,但这个计划将是不可能的。非常感谢你的帮助

  • 你知道怎么读输入吗
  • 你知道如何处理一维数组(列表),比如{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();
    }
    
    下面是一些用于交换两行的伪代码

    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
    

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

    int [] [] sudoku = new int[10] [10]
    
  • 在数独板上进行硬编码,并制作一个例程将板打印出来
  • 一旦一切正常,你就需要菜单了。因此,扩展您的程序,制作一个小菜单,将用户的选择打印回来,而不再执行其他操作
  • 一旦开始,你就可以开始填写菜单选项了。因此,当用户选择选项1时,执行交换两行的例程。其他菜单项仍然可以打印出它们的编号
  • 一旦你成功了,你就差不多完成了。你可以从#3中获取你的例程,并对其进行复制,只需稍作修改,就可以进行其他4项修改

    你没提到数独板是从哪里来的。如果是硬编码的,你就完了。如果没有,那么你所要做的就是采用这种方法。此时,您已经知道可以正确打印电路板、显示菜单和更改电路板


    您提到了数组的问题,它们可能是一个飞跃。对于阵列,您是否有我们可以帮助解决的特定问题?它们就像编程中的其他任何东西一样。您开始对它们一无所知,只是在某种程度上遵循您在其他地方找到的指导和代码。随着你获得更多的经验(正如你在本项目和未来项目中所获得的经验),它们将不再那么神秘,更有意义,直到有一天它们像3+7一样简单。

    尝试将问题分解成更小的部分。首先关注获取用户输入,然后调用一些方法来处理输入。将6个菜单选项中的每一个都分解成一个单独的方法,只需创建一个方法存根,它一开始就不做任何事情。一旦输入工作正常,然后考虑如何打印网格。然后,可能会专注于实现每个选项。当你试图解决这些问题时,在每一个方面都要问一些具体的问题,而不仅仅是粘贴你的家庭作业。请注意,你可能没有收到很多答案,因为贡献者更愿意回答一个表明你付出了一些努力的具体问题,而不是“我不知道如何做……我真的需要通过这门课。”你在努力解决什么具体的部分?你说的硬编码和制作菜单是什么意思?我知道我没有提到数独板是从哪里来的。我上网找到了一个随机的数独游戏,把数字放在上面。教授让我们输入9位数字的数独,但我想他不是想从扫描仪输入的?这是我正在努力解决的一件事。我理解扫描仪的输入…我正在努力解决的主要问题是如何交换电路板中的两个东西。我该怎么做?它是否涉及数组?@anonymous-有关如何硬编码数独,请参见我的示例array@anonymous-菜单基本上是以某种无限循环打印出选项,然后等待用户输入值。检查用户是否键入1,然后调用您的swapTwoRows方法,如果用户键入2,则调用您的swapTwoColumns方法等。如果输入无效,请让用户知道他们需要键入0-5。处理输入后,循环并再次显示电路板以及菜单。就像while(true){displayBoard();displayMenu();getInputFromUser();processInput();}@anonymous一样——想象一下如何交换电子表格中的两行或一张纸上的网格上的两行。从顶部开始,取第一行的数字,复制到第二行的方框中。然后把第二行的数字复制到第一行的框中。在整行中如此等等。在Java中也是一样,循环两行的内容,将每个单元格交换回来