为什么我的方法永远不会返回null而是null?

时间:2014-04-30 15:39:52

标签: java android multidimensional-array adt path-finding

重要编辑:我忘了实际发布调试此代码所需的大量代码。以下是链接:

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))也永远不会计算为true,因为程序永远不会点击其中的return语句。

这是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 s - xyz的容器,并使用{{1}构建}}

这是从以下方法调用方法的地方:

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; } 是&#34; 104&#34;而start是&#34; 204&#34; (分别附于endg2),但G2startCoords均为endCoords

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

为了不引起问题垃圾邮件以引起人们的注意,我想在记录中说明我的问题历史记录中的其他两个问题,同时关于同一个项目,关于我在项目中遇到的不同问题。

1 个答案:

答案 0 :(得分:0)

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

好吧,我遵循了这个建议(制作了一个自定义Pair类的ArrayList,并在那里存储了预期的输入输出),至少解决了这个项目的问题。不幸的是,我仍然不知道问题是什么,但至少它正在发挥作用。