当按下按钮开始新的时,我首先需要我的数独作为随机拼图。
然后主要概念并纠正我,如果我错了是建立一个随机表,这将是用户的解决方案和一个表,用户只能从表中看到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上收到错误。
对不起我的编程技巧。
我希望你能帮助我,或者至少向我推荐一些链接来看看。
提前致谢。
答案 0 :(得分:0)
你有可能过早地加入编码。您似乎需要更好地定义问题的方法。首先,考虑如何手动解决它。将其分解为步骤,然后将这些步骤写下来。然后,让您的代码逐步为您的解决方案建模。
例如,如果你想要一次一行地构建你的电路板,那么你会记下类似的事情,“对于第一行,取1,2,3,然后按随机顺序重新排列它们......”如果你认为。相反,关于一次建立一个数字的板,您可以写道:“在第一行的随机位置放置1。在第二行的随机位置放置1,但避免与第一行冲突。在第三行的唯一剩余列中放置一个。
使用您的第二个数字,您将遇到更多限制 - 而不是仅从第一行中随机选择任何列,您需要从可用列中随机选择。
1 2 .
. 1 .
. . 1
在上面的示例中,在第二行放置2时,如何确定哪个可用? (一种选择导致解决方案,另一种选择导致死胡同)。一旦你能够清楚地表达出手动解决问题所需的步骤,编写代码就会变得更容易,而你可能会遇到的小部分变得更容易解决。