我必须将这个迷宫保持在一个数组中,它会检查单元格中是否有两位数字,它可以保存下一个单元格的线索。包含宝藏的单元格是一个拥有自己坐标的单元格。
在我的情况下,它是单元格52,因为它保存在(5,2)中,或者在这种情况下,(4,1),因为数组从0开始。
我的问题是,我的程序正在读取数字1。在第一个线索中,它导致34,这应该带我到单元格(2,3)。它取而代之的是(1,2)。
我认为这是因为-1,但由于我正在使用人数,我需要减去1,因此它与0对应,而不是1。
public class MazeTest
{
public static void main(String args[])
{
int initRow = 1;
int initCol = 1;
Maze myMaze = new Maze();
myMaze.SetCoordOne(initRow);
myMaze.SetCoordTwo(initCol);
System.out.println("Checking the initial cell");
myMaze.CheckCell();
while (myMaze.GetFound() == false)
{
System.out.println("Checking the next cell.");
myMaze.ReadClue(myMaze.GetCoordOne() - 1, myMaze.GetCoordTwo() - 1);
myMaze.NextCell(myMaze.GetClueOne() - 1, myMaze.GetClueTwo() - 1);
myMaze.CheckCell();
}
}
}
public class Maze
{
private int[][] mazeCell = {{34, 21, 32, 41, 25},
{14, 42, 43, 14, 31},
{54, 45, 52, 42, 23},
{33, 15, 51, 31, 35},
{21, 52, 33, 13, 23} };
private int coordOne;
private int coordTwo;
private int clueOne;
private int clueTwo;
private boolean found = false;
public void ReadClue(int row, int col)
{
clueOne = mazeCell[row][col] / 10;
clueTwo = mazeCell[row][col] % 10;
}
public void NextCell(int rowNum, int colNum)
{
coordOne = rowNum;
coordTwo = colNum;
}
public void CheckCell()
{
System.out.printf("Checking for treasure in %d\n",
mazeCell[coordOne - 1][coordTwo - 1]);
if (coordOne == clueOne && coordTwo == clueTwo)
{
TreasureFound();
}
}
public void TreasureFound()
{
System.out.println("Congratulations, you found the treasure!");
found = true;
}
public int GetMazeCell(int row, int col)
{
return mazeCell[row][col];
}
public int GetCoordOne()
{
return coordOne;
}
public void SetCoordOne(int num)
{
coordOne = num;
}
public int GetCoordTwo()
{
return coordTwo;
}
public void SetCoordTwo(int num)
{
coordTwo = num;
}
public int GetClueOne()
{
return clueOne;
}
public void SetClueOne(int num)
{
clueOne = num;
}
public int GetClueTwo()
{
return clueTwo;
}
public void SetClueTwo(int num)
{
clueTwo = num;
}
public boolean GetFound()
{
return found;
}
}
答案 0 :(得分:0)
你必须决定是否要保持线索和坐标为零或一。
在ReadClue
中,您可以将基于一个值的值分配给线索。
调用myMaze.NextCell(myMaze.GetClueOne() - 1, myMaze.GetClueTwo() - 1);
时,您可以使坐标从零开始。
在CheckCell()
中,您可以对基于单一的线索和从零开始的坐标进行比较。这就是为什么它不起作用。
将您对NextCell的调用更改为:myMaze.NextCell(myMaze.GetClueOne(), myMaze.GetClueTwo());
,这将使坐标和线索都基于一个,然后您的程序就可以正常工作。
答案 1 :(得分:0)
我认为,你的代码中有太多的减法操作。
当你调用NextCell()时,你减少了coords,所以你从0开始索引它。 在下一步,CheckCell()你打印一个mazeCell再次减少coords,这可能看起来像你需要(1,2)而不是(2,3);
另一件事是,在CheckCell中,你将coords与线索进行比较,其中coords已经减少,但线索却没有。