为什么我的方法只返回null



重要编辑:我一开始忘记发布调试它所需的大量代码。以下是链接:

http://pastebin.com/rxENqzBB

http://pastebin.com/KVXCfys4

http://pastebin.com/Sgv01P8V

http://pastebin.com/mrNVej67

我目前正在使用ADT IDE为Android 4.3制作一个Java应用程序。该应用程序包含校园地图,并向用户输出从他们当前所在的房间到他们希望去的房间的方向(这两个方向都已由用户输入(。然而,我遇到了一个问题——以下方法总是返回null,即使它不应该返回:

Coordinates findCoordsWithRoom(String roomName)
{
    //all floors; 0 -> 1
    for (int z = 0; z < map.length; z++)
    {
        //all rows; 0 -> 10
        for (int y = 0; y < map[z].length; y++)
        {
            //all cols; 0 -> 9
            for (int x = 0; x < map[z][y].length; x++)
            {
                if (dne.equals(map[z][y][x])) { continue; } //if this node is a "dne" node, skip it
                //all valid connections out of this node
                for (int c = 0; c < map[z][y][x].dirArr.length; c++)
                {
                    if (!map[z][y][x].dirArr[c].exists) { continue; }
                    //all rooms on this connection
                    for (int r = 0; r < map[z][y][x].dirArr[c].rooms.length; r++)
                    {
                        String thisRoomName = map[z][y][x].dirArr[c].rooms[r].name;
                        //if this room has the right name
                        if (roomName.equals(thisRoomName))
                        {   //found it
                            return map[z][y][x].coords;
                        }
                    }
                }
            }
        }
    }
    //failed to find it
    return null;
}

即使调试器告诉我相关变量相等,if(roomName.equals(thisRoomName))也不会计算为真,因为程序永远不会命中其中的返回语句。

这是map变量:

Node[][][] map =
{
    {   //first floor
        //00   01   02   03   04   05   06   07   08   09 <-x/y:
        {dne, dne, dne, dne, dne, cls, dne, dne, dne, dne}, //00
        {dne, dne, dne, dne,  oc,  cl,  cf, dne, dne, dne}, //01
        {dne, dne, dne, dne, dne, dne, dne, dne, dne, dne}, //02
        {dne, dne, dne, dne, og2,  g4,  gc,  g2, gs1, dne}, //03
        {dne, dne, dne, dne, dne, dne, gs2,  g1,  g3, dne}, //04
        {dne, ot3, dne, ot1,  op, dne, og1, gal, dne, dne}, //05
        {dne, ot4, dne, dne, dne, dne,  a2,  a1, dne, dne}, //06
        {dne,  t3, dne, dne, dne, dne, dne,  a3,  as, dne}, //07
        {dne,  t1, tl1, ot2, dne, dne, dne,  a4, dne, dne}, //08
        { ts,  t2, tl2, ot5, dne, dne, dne, dne, dne, dne}, //09
        {dne,  t4, tls, dne, dne, dne, dne, dne, dne, dne}, //10
    },
    {   //second floor
        //00   01   02   03   04   05   06   07   08   09 <-x/y:
        {dne, dne, dne, dne, dne, CLS, dne, dne, dne, dne}, //00
        {dne, dne, dne, dne, dne,  CL,  C2,  C4, dne, dne}, //01
        {dne, dne, dne, dne, dne,  C1,  C3,  C5, dne, dne}, //02
        {dne, dne, dne, dne, dne,  G4, GC1,  G3, GS1, dne}, //03
        {dne, dne, dne, dne, dne, GC2, dne,  G1,  G2, dne}, //04
        {dne, dne, dne, dne, dne, GS2, dne, GAL, dne, dne}, //05
        {dne, dne, dne, dne, dne, dne,  A5,GALS, dne, dne}, //06
        {dne, dne, dne, dne, dne, dne,  A3,  A1, dne, dne}, //07
        {dne, dne, dne, dne, dne, dne, dne,  A2,  AS, dne}, //08
        { TS,  T4,  T3, dne, dne, dne, dne, dne, dne, dne}, //09
        {dne, TLS,  TL, dne, dne, dne, dne, dne, dne, dne}, //10
    }
};

dne只是static Node dne = new Node();

这里有一个指向map中所有对象结构的链接,因为它太大了,无法直接粘贴:http://pastebin.com/Qad46gHh

Coordinates对象本质上只是三个int的容器——xyz,并且是用public Coordinates (int z, int y, int x)构建的。

这就是调用方法的位置:

public ArrayList<Coordinates> makeRoute(String start, String end)
{
    destination = end;
    ArrayList<Coordinates> newCoordArr1 = new ArrayList<Coordinates>();
    ArrayList<Coordinates> newCoordArr2 = new ArrayList<Coordinates>();
    ArrayList<Coordinates> newCoordArr3 = new ArrayList<Coordinates>();
    Coordinates startCoords = world.findCoordsWithRoom(start);
    Coordinates endCoords = world.findCoordsWithRoom(end);
    ArrayList<Coordinates> path = world.makePath(startCoords, endCoords, newCoordArr1, newCoordArr2, newCoordArr3);
    return path;
}

其中,例如,start是"104",end是"204"(分别附加到g2G2(,但startCoordsendCoords都是null

以下是路径查找算法的链接:http://pastebin.com/NVhSU06w

为了不让人注意到这一点,我想郑重声明,我的问题历史记录中的另外两个问题,虽然都是关于同一个项目,但都是关于我在该项目中遇到的不同问题。

wouldn't it be simpler to keep a list of all the rooms? – njzk2 Apr 30 at 16:10

好吧,我遵循了这个建议(制作了一个自定义Pair类的ArrayList,并在其中存储了预期的输入输出(,至少解决了项目的这个问题。不幸的是,我仍然不知道问题出在哪里,但至少部分是有效的。

相关内容

  • 没有找到相关文章

最新更新