Java For循环导致窗口弹出次数超出预期
我正试图用Java(使用Eclipse,如果出于任何原因这很重要的话)构建“扫雷者”,在构建过程中,我遇到了一个以前从未遇到过的问题 当矿井被压下时应该出现的窗口被打开了。。。很多该窗口仅用于打开一次并提示用户继续或放弃 需要注意的重要事项只有在按下最上面一行按钮上的地雷时,才会发生这种情况。不完全确定这是否重要,但窗口弹出的次数是11次。也没有给出错误代码 下面的代码块适用于用户单击矿井时使用Java For循环导致窗口弹出次数超出预期,java,for-loop,awt,minesweeper,Java,For Loop,Awt,Minesweeper,我正试图用Java(使用Eclipse,如果出于任何原因这很重要的话)构建“扫雷者”,在构建过程中,我遇到了一个以前从未遇到过的问题 当矿井被压下时应该出现的窗口被打开了。。。很多该窗口仅用于打开一次并提示用户继续或放弃 需要注意的重要事项只有在按下最上面一行按钮上的地雷时,才会发生这种情况。不完全确定这是否重要,但窗口弹出的次数是11次。也没有给出错误代码 下面的代码块适用于用户单击矿井时使用 //These are here just for clarification private in
//These are here just for clarification
private int continues = 3;
private Listen l = new Listen();
private class Listen extends MouseAdapter implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
if (source == mines[i][j])
{
//Though probably not optimal, I created mines based around a number referred to as difficulty
if (minePlacement[i][j] <= difficulty)
{
Frame f = new Frame();
Label L = new Label("You have " + continues + " continues remaining.");
Button B = new Button ("Try Again?");
Label La = new Label("You're out of continues...");
Button But = new Button("Exit");
f.setLayout(new FlowLayout());
B.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
f.dispose();
}
});
if (continues <= 0)
{
f.add(La);
f.add(But);
/*
For clarification,
This actionListener is used
solely to do System.exit(0);
*/
But.addActionListener(li);
f.setSize(250,125);
}
else
{
f.add(L);
f.add(B);
f.setSize(250,100);
}
f.setLocationRelativeTo(null);
f.setAlwaysOnTop(true);
f.setVisible(true);
f.setTitle("You Hit A Mine!");
continues--;
}
//这里只是为了澄清一下
私有int=3;
私有侦听l=新侦听();
私有类Listen扩展MouseAdapter实现ActionListener
{
已执行的公共无效操作(操作事件e)
{
对象源=e.getSource();
对于(int i=0;i<9;i++)
{
对于(int j=0;j<9;j++)
{
if(source==mines[i][j])
{
//虽然可能不是最优的,但我根据一个称为“难度”的数字创建了地雷
如果(i)[j]您似乎在反复地将侦听器添加到相同的按钮。在纸上重新思考此逻辑,然后重新编写此代码。旁注:为什么要创建AWT GUI?此GUI库已过时20多年。好的。我一定会将其编写出来,然后再重新编写。此外,我刚刚尝试更多地使用图形,我想AWT是一个很好的起点。你有什么建议吗?抛弃AWT。更好的方法是使用Swing或更好的JavaFX。好的,我一定会尝试这些方法。除了Oracle和其他Java文档,我还可以在线查找其他建议资源吗?链接到我创建的
for (int i = 0; i < rows; i++)
{
int x = (int) ((Math.random() + .1) * 10);
minePlacement[i][0] = x;
mines[i][0] = new Button();
mines[i][0].addMouseListener(l);
mines[i][0].addActionListener(l);
add(mines[i][0]);
for (int j = 0; j < cols; j++)
{
int y = (int) ((Math.random() + .1) * 10);
minePlacement[i][j] = y;
mines[i][j] = new Button();
mines[0][j].addMouseListener(l);
mines[0][j].addActionListener(l);
mines[i][j].addMouseListener(l);
mines[i][j].addActionListener(l);
add(mines[i][j]);
}