Java 随机移动方法Tic Tac Toe不起作用
我正在制作一个tic-tac-toe游戏,允许用户与计算机进行游戏。当用户选择板上的按钮时,AI将检测是否存在可能的三连击。如果没有检测到威胁,计算机将随机选择板上的一个点进行移动 然而,我的问题是,当我做某个动作时,计算机有时会移动,有时会被跳过。我想知道如何解决这个问题,下面显示了我的Java 随机移动方法Tic Tac Toe不起作用,java,random,recursion,stack-overflow,Java,Random,Recursion,Stack Overflow,我正在制作一个tic-tac-toe游戏,允许用户与计算机进行游戏。当用户选择板上的按钮时,AI将检测是否存在可能的三连击。如果没有检测到威胁,计算机将随机选择板上的一个点进行移动 然而,我的问题是,当我做某个动作时,计算机有时会移动,有时会被跳过。我想知道如何解决这个问题,下面显示了我的randomMove()方法 这种情况需要递归方法(我的老师简短地告诉我这可能是必要的)还是其他方法?如果它是递归的,你能解释一下吗?谢谢你的帮助 public void RandomMove() {
randomMove()
方法
这种情况需要递归方法(我的老师简短地告诉我这可能是必要的)还是其他方法?如果它是递归的,你能解释一下吗?谢谢你的帮助
public void RandomMove()
{
Random x = new Random();
int y = 1 + x.nextInt(9);
if (buttons[y].getText().equals("O") || buttons[y].getText().equals("X")) {
RandomMove();
}
else {
buttons[y].setText("O");
buttons[y].setEnabled(false);
}
}
更具体地说,我有时会遇到这种错误:
线程“AWT-EventQueue-0”java.lang.StackOverflowerr中出现异常
通过在每次调用该方法时创建一个新方法(在一个可能的递归方法中),代码将“阻塞”。原因是,Random
实例使用当前时间(以毫秒为单位)进行播种,此后它将生成的序列是“一成不变的”。该方法将在一毫秒内完成多次,创建许多随机对象
相反,(名称不好的)x
应该声明为类属性,并且只创建一次
通过在每次调用该方法时创建一个新方法(在一个可能的递归方法中),代码将“阻塞”。原因是,Random
实例使用当前时间(以毫秒为单位)进行播种,此后它将生成的序列是“一成不变的”。该方法将在一毫秒内完成多次,创建许多随机对象
相反,(名称不好的)x
应该声明为类属性,并且只创建一次。根据Andrew Thompson的答案,尝试替换
Random x = new Random();
int y = 1 + x.nextInt(9);
用这个
int y = (int)(Math.random() * 9);
根据安德鲁·汤普森的答案,试着替换
Random x = new Random();
int y = 1 + x.nextInt(9);
用这个
int y = (int)(Math.random() * 9);
你是哈娜的朋友吗?这两种方法似乎都很熟悉。如果其中一种方法有效,请将其标记为正确。是的,我是。但我发现了问题所在,无法联系到他让他改变问题。你是哈娜的朋友吗?这两种方法似乎都很熟悉。如果其中一种方法有效,请将其标记为正确。是的,我是。但是我解决了问题,没能联系到他让他改变问题。打电话给Math.random()
,很好。我正在考虑提它。关于Math.random()
的好消息。我在考虑提这件事。