gpt4 book ai didi

java - java程序中if语句偏转时出错

转载 作者:行者123 更新时间:2023-12-01 23:23:45 26 4
gpt4 key购买 nike

我在这里遇到了一个关于 Java 的错误,非常非常奇怪!

我有一个LinkedList大小为 3,当我将其与零进行比较时,其计算结果为 True !天啊,为什么会发生这种事!?

代码:

    long depth = 0;
long initial = System.currentTimeMillis();

OthelloStateNode root = new OthelloStateNode(_state);

List<OthelloStateNode> children = root.generateChildren();

System.out.println("SIZE: " + children.size());

if (children.isEmpty()) {
return null;
}

generateChildren() 函数:

     public List<OthelloStateNode> generateChildren() {
// expand children, if necessary
if (children == null) {
children = new LinkedList<>();
for (OthelloMove move : state.generateMoves()) {
OthelloStateNode child = new OthelloStateNode(state.applyMoveCloning(move));
child.movement = move;
child.parent = this;

children.add(child);
}
}
return children;
}

println 的输出是“尺寸:3”!没有理由是 True

显然,如果我删除 System.currentTimeMillis()它工作正常...但它不应该与 3 是否等于 0 的问题有关,不是吗?

有人知道这件事吗?这是代码,如果您想下载并测试它是否也发生在您的计算机上:https://docs.google.com/file/d/0Bxl_AQ6nM3yXVnAzdXg5MFUtVTg/edit

screenshot

最佳答案

我认为这个问题肯定属于“灰色区域”,因为从您提供的代码片段来看,它根本不可能发生 - 链表绝对有效,并且没有您可以依赖的错误。因此,我们无法真正提供答案的最明显原因是我们没有足够的信息。

现在,您说了一些“有趣”或至少可疑的事情 - 当您删除时间测量时,它就会起作用。有时,当您运行多个线程并且一个线程以某种方式更改列表的内部状态时,可能会发生这种情况。例如:线程 A 在时间 t1 获取对具有 3 个元素的 List 的引用。线程 B 也具有相同的引用。线程 B 在时间 t2 (t2 > t1) 更改列表的状态,线程 A 对此一无所知,它只是保持持有引用并忙于自己的工作。在时间 t3 (t3 > t2) 线程 A 访问列表,显然它已经改变了。

这是出现这种行为的一个可能原因。

另一个值得深入研究的方向:)

您是否尝试过在没有 IDE 的情况下以“旧方式”在命令行中运行它?有时(我承认很少,而且主要是在远程调试中)这种情况可能会发生,因为您的源代码与调试器认为的不同步。这可以通过清除已编译的类并重建所有内容来解决。我知道这不太可能是原因,但值得一提。

希望这能有所帮助

关于java - java程序中if语句偏转时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20321127/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com