Java-программа для проверки лабиринта массива на наличие подсказок - ответ всегда 1 - PullRequest
0 голосов
/ 12 декабря 2011

Мне нужно сделать этот лабиринт в массиве, и он проверяет ячейку на наличие двухзначного числа, которое содержит подсказку для следующей ячейки.Ячейка, которая содержит сокровище, - это та, которая содержит свои собственные координаты.

В моем случае это ячейка 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 голосов
/ 12 декабря 2011

Я думаю, в вашем коде слишком много операций вычитания.

Когда вы вызываете NextCell (), вы уменьшаете координаты, поэтому вы индексируете их с 0. На следующем шаге CheckCell () вы печатаете mazeCell с координатами, снова уменьшенными, что может выглядеть так, как будто вы переходите к (1,2) вместо (2,3);

Другое дело, что в CheckCell вы сравниваете координаты с подсказками, где координаты уже уменьшены, а подсказки - нет.

0 голосов
/ 12 декабря 2011

Вы должны решить, хотите ли вы, чтобы ключи и координаты оставались нулевыми или единичными.

В ReadClue вы присваиваете однозначные значения для подсказок.

При вызове myMaze.NextCell(myMaze.GetClueOne() - 1, myMaze.GetClueTwo() - 1); вы делаете координаты на основе нуля.

В CheckCell() вы делаете сравнение между подсказками на основе одного и нулями.Вот почему это не работает.

Измените ваш вызов на NextCell на: myMaze.NextCell(myMaze.GetClueOne(), myMaze.GetClueTwo());, это сделает координаты и подсказки единичными, и тогда ваша программа должна работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...