Java程序检查阵列迷宫的线索 - 答案总是1关

时间:2011-12-12 10:08:40

标签: java maze

我必须将这个迷宫保持在一个数组中,它会检查单元格中是否有两位数字,它可以保存下一个单元格的线索。包含宝藏的单元格是一个拥有自己坐标的单元格。

在我的情况下,它是单元格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;
    }
}

2 个答案:

答案 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已经减少,但线索却没有。