尝试在Java上制作一个随机的数独3x3 - BlueJ

时间:2015-12-02 13:40:23

标签: java bluej sudoku

我是新手,所以我会直接询问,如果smb可以帮助我,我将不胜感激。我试图在BlueJ进行数独游戏,直到现在我还没有得到谷歌搜索和工作人员的任何帮助,所以我发布在这里。

当按下按钮开始新的时,我首先需要我的数独作为随机拼图。

然后主要概念并纠正我,如果我错了是建立一个随机表,这将是用户的解决方案和一个表,用户只能从表中看到3个数字,然后选择另一个。通过比较2个表,用户和解决方案,程序可以查看用户是否正确。

到目前为止,我有这段代码。

import java.awt.*;
import javax.swing.*;
import java.util.*;
public class MyFrame extends Frame
{
    private double[] data;
    private Button avgButton,minButton,maxButton,rndomButton;
    private Button quit;

    public MyFrame(String title)
    {
        super(title);
        resize(200,200);
        setResizable(false);
        setLayout(new GridLayout(3,2));
        quit=new Button("QUIT");
        rndomButton=new Button("RANDOM");
        add(rndomButton);
        add(quit);
    }

    public int Array()
    {
            Random rand = new Random();
            int  n = rand.nextInt(3) + 1;
            int  y = rand.nextInt(2) + 1;
            int i=0;
            int j=0;
            int value;
            int[][] board = new int[3][3];
            value=board[0][0];
            int z=board[0][0];
            for(i=0;i<3;i++)
            {

                    do{
                    board[i][0]=n;
                }while (board[i][0]!=board[i-1][0]&&board[i][0]!=board[i-2][0]);
            }
            for(j=0;j<3;j++)
            {
                    do{
                    board[0][j]=n;
                }while (board[0][j]!=board[0][j-1]&&board[0][j]!=board[0][j-2]);
            }
            for(i=1;i<3;i++)
            {
                for(j=1;j<3;j++)
                {
                    do{
                    board[i][j]=n;
                }while (board[i][j]!=board[i-1][j]&&board[i][j]!=board[i-2][j]&&board[i][j]!=board[i][j-1]&&board[i][j]!=board[i][j-2]);
                }
            }
            for(i=0;i<3;i++)
            {
            for(j=0;j<3;j++)
            {
                z=board[i][j];
            }
            }
           return z;
    }

    public boolean action(Event evt,Object arg)
    {

       if(evt.target.equals(rndomButton))
         message("Array: "+Array());
        else
        if(evt.target.equals(quit))
         System.exit(0);
        return true;
    }
}

我不知道它是否正确,因为当我尝试返回z值时,只会弹出一个窗口,其中没有任何内容。

请注意,如果我在持续时间内返回z,则会在bluej上收到错误。

对不起我的编程技巧。

我希望你能帮助我,或者至少向我推荐一些链接来看看。

提前致谢。

1 个答案:

答案 0 :(得分:0)

你有可能过早地加入编码。您似乎需要更好地定义问题的方法。首先,考虑如何手动解决它。将其分解为步骤,然后将这些步骤写下来。然后,让您的代码逐步为您的解决方案建模。

例如,如果你想要一次一行地构建你的电路板,那么你会记下类似的事情,“对于第一行,取1,2,3,然后按随机顺序重新排列它们......”如果你认为。相反,关于一次建立一个数字的板,您可以写道:“在第一行的随机位置放置1。在第二行的随机位置放置1,但避免与第一行冲突。在第三行的唯一剩余列中放置一个。

使用您的第二个数字,您将遇到更多限制 - 而不是仅从第一行中随机选择任何列,您需要从可用列中随机选择。

1 2 .
. 1 .
. . 1

在上面的示例中,在第二行放置2时,如何确定哪个可用? (一种选择导致解决方案,另一种选择导致死胡同)。一旦你能够清楚地表达出手动解决问题所需的步骤,编写代码就会变得更容易,而你可能会遇到的小部分变得更容易解决。