重要编辑:我一开始忘记发布调试它所需的大量代码。以下是链接:
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
的容器——x
、y
和z
,并且是用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"(分别附加到g2
和G2
(,但startCoords
和endCoords
都是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,并在其中存储了预期的输入输出(,至少解决了项目的这个问题。不幸的是,我仍然不知道问题出在哪里,但至少部分是有效的。