Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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字符比较未按预期工作_Java_Multidimensional Array - Fatal编程技术网

Java字符比较未按预期工作

Java字符比较未按预期工作,java,multidimensional-array,Java,Multidimensional Array,所以我在一个二维字符数组中移动。取决于某些坐标处的字符是什么,我可能希望也可能不希望将对象添加到数组列表中。”“R”是合法运动,“X”是非法运动 下面的代码检查它是否在网格的边界内,然后在创建对象并将它们添加到我的数组之前检查合法的移动。if语句是这样的,因为它们需要按特定顺序打开 private static void OpenNodes() { if(currentNode.GetX() > 0 && currentNode.GetY() > 0 &

所以我在一个二维字符数组中移动。取决于某些坐标处的字符是什么,我可能希望也可能不希望将对象添加到数组列表中。”“R”是合法运动,“X”是非法运动

下面的代码检查它是否在网格的边界内,然后在创建对象并将它们添加到我的数组之前检查合法的移动。if语句是这样的,因为它们需要按特定顺序打开

 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'
它现在可以按预期运行。

尝试构建一个简短的代码示例来演示您的问题(使我们能够重现)。解释什么是输入,什么是预期输出,什么是实际输出。