Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 随机移动方法Tic Tac Toe不起作用_Java_Random_Recursion_Stack Overflow - Fatal编程技术网

Java 随机移动方法Tic Tac Toe不起作用

Java 随机移动方法Tic Tac Toe不起作用,java,random,recursion,stack-overflow,Java,Random,Recursion,Stack Overflow,我正在制作一个tic-tac-toe游戏,允许用户与计算机进行游戏。当用户选择板上的按钮时,AI将检测是否存在可能的三连击。如果没有检测到威胁,计算机将随机选择板上的一个点进行移动 然而,我的问题是,当我做某个动作时,计算机有时会移动,有时会被跳过。我想知道如何解决这个问题,下面显示了我的randomMove()方法 这种情况需要递归方法(我的老师简短地告诉我这可能是必要的)还是其他方法?如果它是递归的,你能解释一下吗?谢谢你的帮助 public void RandomMove() {

我正在制作一个tic-tac-toe游戏,允许用户与计算机进行游戏。当用户选择板上的按钮时,AI将检测是否存在可能的三连击。如果没有检测到威胁,计算机将随机选择板上的一个点进行移动

然而,我的问题是,当我做某个动作时,计算机有时会移动,有时会被跳过。我想知道如何解决这个问题,下面显示了我的
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()
的好消息。我在考虑提这件事。