Java 这段代码将产生一个无限循环

Java 这段代码将产生一个无限循环,java,infinite-loop,Java,Infinite Loop,我正在用Java开发一个基本的tic-tac-toe玩家对玩家游戏,但是运行它会导致无限循环。没有语法错误。我是一个编程新手,所以代码有点凌乱。谢谢 这是代码(逻辑代码,不是图形) 你在重复同样的事件。因此,情况永远不会改变。每个循环迭代考虑相同的ActionEvent对象,由相同的evt值引用。相同的if或else if子句在每次循环迭代中重复,将相同的播放片段永远放在同一位置 无限循环从第一步开始。但是win=true语句只能在多次移动之后出现。所以这些永远不会发生,而(!win)总是正确的

我正在用Java开发一个基本的tic-tac-toe玩家对玩家游戏,但是运行它会导致无限循环。没有语法错误。我是一个编程新手,所以代码有点凌乱。谢谢

这是代码(逻辑代码,不是图形)


你在重复同样的事件。因此,情况永远不会改变。每个循环迭代考虑相同的
ActionEvent
对象,由相同的
evt
值引用。相同的
if
else if
子句在每次循环迭代中重复,将相同的播放片段永远放在同一位置

无限循环从第一步开始。但是
win=true
语句只能在多次移动之后出现。所以这些永远不会发生,
而(!win)
总是正确的

如果要在方法内循环,则需要获取循环内的下一个事件

如果希望调用该方法以响应事件,则不需要在该方法中使用循环


另一方面,作为一个学习Java的人,在某个时候你会被介绍到数组。使用包含代表X、O或两者都不代表的值的3x3数组可以简化此特定代码。

此外,看起来您有一些复制和粘贴错误。我想你不是有意的

b1xon=true;
在其他一些ifs中,应该检查操作系统。比如说,

else if (evt.getSource() == b8 && i == 2) {
                b8.setText("O");
                i = 1;
                b1xon=true;
            }

正如Andy所说,事件处理程序中的循环是无限循环的主要原因。

我不确定GUI是如何设置的,但win变量永远不会设置为true。当您单击一个按钮(第一次运行该方法)时,您的循环将被执行,设置win=true的条件将永远不会出现。您需要删除do while。除此之外,还需要在actionPerformed方法之外声明变量,否则将重新初始化变量

为什么不应该是一个无限循环呢;如果(evt.getSource()==b9&&i==1),则不应阅读(或理解)此代码,但应使用最后一个
else{
检查i==2要扩展@SotiriosDelimanolis的评论,您在这里实际上还没有提出问题。您能解释一下它的作用,您期望它做什么,以及您试图解决的问题吗?谢谢。这是一个无限循环,因为win总是错误的。对于一个不完整的问题,这是一个不完整的答案。很抱歉t、 预期的输出是一个tic-tac-toe游戏。有9个按钮,当你点击任何一个按钮时,文本(X或O)应该出现。我创建了一个变量“I”在X和O之间切换,它会随着玩家1(X)的增加而增加点击,当玩家2点击时减少。这被包装在一个do-while循环中。当有人赢了,它应该停止运行。所以我创建了一组布尔值来检查按钮是否被点击,如果是,是谁点击的。当任何赢的组合实现时,布尔值“赢”变为真,循环应该停止运行。为什么循环是无限的?
else if (evt.getSource() == b8 && i == 2) {
                b8.setText("O");
                i = 1;
                b1xon=true;
            }