Java字符比较未按预期工作
所以我在一个二维字符数组中移动。取决于某些坐标处的字符是什么,我可能希望也可能不希望将对象添加到数组列表中。”“R”是合法运动,“X”是非法运动 下面的代码检查它是否在网格的边界内,然后在创建对象并将它们添加到我的数组之前检查合法的移动。if语句是这样的,因为它们需要按特定顺序打开Java字符比较未按预期工作,java,multidimensional-array,Java,Multidimensional Array,所以我在一个二维字符数组中移动。取决于某些坐标处的字符是什么,我可能希望也可能不希望将对象添加到数组列表中。”“R”是合法运动,“X”是非法运动 下面的代码检查它是否在网格的边界内,然后在创建对象并将它们添加到我的数组之前检查合法的移动。if语句是这样的,因为它们需要按特定顺序打开 private static void OpenNodes() { if(currentNode.GetX() > 0 && currentNode.GetY() > 0 &
private static void OpenNodes()
{
if(currentNode.GetX() > 0 && currentNode.GetY() > 0 && currentNode.GetX() < rowsCols && currentNode.GetY() < rowsCols)
{//check R
if(CheckAccessibility(currentNode.GetX() + 1, currentNode.GetY()))
{
CreateNode(currentNode.GetX() + 1, currentNode.GetY(), 2, "R");
}
//check RD
if(CheckAccessibility(currentNode.GetX() + 1, currentNode.GetY() + 1))
{
CreateNode(currentNode.GetX() + 1, currentNode.GetY() + 1, 2, "RD");
}
//check D
if(CheckAccessibility(currentNode.GetX(), currentNode.GetY() + 1))
{
CreateNode(currentNode.GetX(), currentNode.GetY() + 1, 2, "D");
}
//check DL
if(CheckAccessibility(currentNode.GetX() - 1, currentNode.GetY() + 1))
{
CreateNode(currentNode.GetX() - 1, currentNode.GetY() + 1, 2, "DL");
}
//check L
if(CheckAccessibility(currentNode.GetX() - 1, currentNode.GetY()))
{
CreateNode(currentNode.GetX() - 1, currentNode.GetY(), 2, "L");
}
//check UL
if(CheckAccessibility(currentNode.GetX() - 1, currentNode.GetY() - 1))
{
CreateNode(currentNode.GetX() - 1, currentNode.GetY() - 1, 2, "UL");
}
//check U
if(CheckAccessibility(currentNode.GetX(), currentNode.GetY() - 1))
{
CreateNode(currentNode.GetX(), currentNode.GetY() - 1, 2, "U");
}
//check UR
if(CheckAccessibility(currentNode.GetX() + 1, currentNode.GetY() - 1))
{
CreateNode(currentNode.GetX() + 1, currentNode.GetY() - 1, 2, "UR");
}
}
}
它返回的正是我所期望的
x :2 y: 1 movement: R type: X
x :2 y: 2 movement: RD type: X
x :1 y: 2 movement: D type: R
x :0 y: 2 movement: DL type: X
x :0 y: 1 movement: L type: R
x :0 y: 0 movement: UL type: R
x :1 y: 0 movement: U type: R
x :2 y: 0 movement: UR type: R
但当我运行正常时
private static boolean CheckAccessibility(int varX, int varY)
{
if(grid[varX][varY] == 'X')
{
return false;
}
return true;
}
我明白了:
x :2 y: 1 movement: R type: X
x :0 y: 2 movement: DL type: X
x :0 y: 1 movement: L type: R
x :0 y: 0 movement: UL type: R
x :1 y: 0 movement: U type: R
我的网格看起来像这样
RRRXG
RSXXR
XRXXR
XRRRR
RRRRX
有人能解释为什么不能正确识别字符,导致它创建X节点并删除R节点吗
编辑
我的创建节点函数如下所示。(有点不整洁)
private静态布尔CreateNode(int xCoordinate、int yccoordinate、int varCost、String movementDirection)
{
布尔值=假;
if(closed.size()>0)//检查我们以前是否访问过此节点
{
对于(int i=0;i=open.get(i.GetF())//如果新路径更昂贵,则不要添加节点
{
返回false;
}
}
}
打开.添加(节点);
}
其他的
{
节点节点=新节点(xCoordinate、yCoordinate、varCost、pathCost、grid[yCoordinate][xCoordinate]、findheurisic(yCoordinate、xCoordinate)、movementDirection);
打开.添加(节点);
}
}
返回true;
}
您的支票正在做您认为它正在做的事情。CreateNode()
是否更改currentNode
?仔细检查你传递的索引,确保它们是你所期望的 好的,我仍然不知道为什么,但我的网格似乎希望x和y值颠倒。我是这样访问网格的:
private static boolean CheckAccessibility(int varX, int varY)
{
if(grid[varX][varY] == 'X')
{
//return false;
}
return true;
}
grid[varx][varY] == 'X'
grid[varY][varX] == 'X'
当它想要这样的时候:
private static boolean CheckAccessibility(int varX, int varY)
{
if(grid[varX][varY] == 'X')
{
//return false;
}
return true;
}
grid[varx][varY] == 'X'
grid[varY][varX] == 'X'
它现在可以按预期运行。尝试构建一个简短的代码示例来演示您的问题(使我们能够重现)。解释什么是输入,什么是预期输出,什么是实际输出。