gpt4 book ai didi

Java返回问题

转载 作者:行者123 更新时间:2023-11-30 05:09:22 25 4
gpt4 key购买 nike

  public void question(int col, int n, Node<Integer> part_soln) {
if (col==0) stack.push(part_soln);
else for (int row=1; row<=n; row++)
{ if (!exists(row,part_soln) && !unsafe(col,row,col+1,part_soln))
{ Node<Integer> new_soln = new Node<Integer>(row,part_soln);
question(col-1,n,new_soln);
}
}
}

我正在将part_soln插入堆栈,但现在我想获取第一个part_soln而不是堆栈,一旦我获取part_soln,我将打破循环,我将问题修改为

  public void question(int col, int n, Node<Integer> part_soln) {
if (col==0) return part_soln;
else for (int row=1; row<=n; row++)
{ if (!exists(row,part_soln) && !unsafe(col,row,col+1,part_soln))
{ Node<Integer> new_soln = new Node<Integer>(row,part_soln);
question(col-1,n,new_soln);
}
}
return null;
}

出现问题,我无法获取堆栈中的第一个元素,但不断得到“null”作为答案,有什么建议吗?

最佳答案

question() 的第二个版本中,只有两个 return 语句,第二个语句每当 col 时都返回 null != 0.

所以你似乎搞乱了你的递归方案,因为即使 question() 在循环内递归地调用自身,返回值也没有被使用。

这将有助于了解该方法应该做什么。但无论如何,我尝试根据您提供的信息(您想要找到并返回第一个合适的解决方案)修复它

public Node<Integer> question(int col, int n, Node<Integer> part_soln) {
if (col==0)
return part_soln;
else for (int row=1; row<=n; row++) {
if (!exists(row,part_soln) && !unsafe(col,row,col+1,part_soln)) {
Node<Integer> new_soln = new Node<Integer>(row,part_soln);
Node<Integer> ret = question(col-1,n,new_soln);
if (ret != null)
return ret;
}
}
return null;
}

不同之处在于,我存储了递归调用的返回值,如果它不为 null,则立即返回它。

关于Java返回问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3987642/

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