重要编辑:我忘了实际发布调试此代码所需的大量代码。以下是链接:
我目前正在使用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 - x
,y
和z
的容器,并使用{{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; (分别附于end
和g2
),但G2
和startCoords
均为endCoords
。
以下是寻路算法的链接:http://pastebin.com/NVhSU06w
为了不引起问题垃圾邮件以引起人们的注意,我想在记录中说明我的问题历史记录中的其他两个问题,同时关于同一个项目,关于我在项目中遇到的不同问题。
答案 0 :(得分:0)
wouldn't it be simpler to keep a list of all the rooms? – njzk2 Apr 30 at 16:10
好吧,我遵循了这个建议(制作了一个自定义Pair类的ArrayList,并在那里存储了预期的输入输出),至少解决了这个项目的问题。不幸的是,我仍然不知道问题是什么,但至少它正在发挥作用。