2015-04-02 2 views
0

У меня есть класс тестера. Я все настроен, я просто не уверен, как сделать эту работу с моим планом. Вот что я пытаюсь сделать:Поиск местоположения и направления движения по сетке в Java

«Вы находитесь на бесконечной сетке авеню и улиц, где позиции представлены в виде сочетания целых чисел (проспект, улица). Вы можете использовать негативы. Теперь рассмотрите пьяницу, которая случайно выбирает одно из четырех направлений на пересечении, а затем натыкается на следующее пересечение, делая то же самое и т. д. Напишите класс Drunkard, чтобы имитировать этот способ получения начальной точки пьяницы. Ваш класс пьяницы должен иметь в качестве переменных экземпляра текущий проспект пьяницы (местоположение x) и текущая улица (местоположение y). У вашего класса должен быть метод с именем step(), который перемещает пьяницу к следующему случайно выбранному соседнему перекрестку. У вашего класса должен быть другой метод, называемый fastForward(int steps), который принимает целое число в качестве входного сигнала (вызовите его шаги) и перемещает пересечения пьяных ступеней с его Текущее местоположение. Ваш класс должен иметь метод getLocation(), который возвращает строку, указывающую текущее местоположение пьяницы. Наконец ваш класс должен иметь метод, называемый howFar(), который сообщает расстояние пьяниц в блоках от того, где он начал рассчитываются Манхэттенский расстояние метрики.»

Что вы рекомендуете? Любая помощь будет делать, спасибо.

Вот что у меня есть мой план до сих пор.

java.util.Random; 

class Drunkard 
{ 
    private int avenue; 
    private int street; 

    Drunkard(int avenue, int street) { 
     this.avenue = avenue; 
     this.street = street; 
    } 

    Random rand = new Random(); 

    void moveUp(){ 
     this.street -= 1; 
    } 
    void moveDown(){ 
     this.street += 1; 
    } 
    void moveRight(){ 
     this.avenue += 1; 
    } 
    void moveLeft(){ 
     this.avenue -= 1; 
    } 
    void getLocation(){ 
     int avenue = parseInt("avenue"); 
     int street = parseInt("street"); 
     System.out.println("Location: " + avenue + ", " + street); 
    } 
    void fastForward(int steps) 
    { 
     for (int i=0; i < steps.length; i++}{ 
     } 
    } 
    void step(){ 
    } 
    void howFar(){ 
     int distance = Math.abs(x1-x0) + Math.abs(y1-y0); 
    } 
} 

И мне нужно это соответствовать с этим тестером класса.

import java.util.Scanner; 

public class DrunkardTester { 
    public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 

    System.out.println("Please enter the starting avenue integer: "); 
    int avenue = input.nextInt(); 
    System.out.println("Please enter the starting street integer: "); 
    int street = input.nextInt(); 

    // instantiate 
    Drunkard jeff = new Drunkard(avenue,street); 

    //move 100 intersections 
    jeff.fastForward(100); 

    //find current location 
    String location = jeff.getLocation(); 

    // get distance from start 
    int distance = jeff.howFar(); 

    System.out.println("Current location: " + location); 
    System.out.println("This is " + distance + " blocks from your origin."); 

    } 
} 
+1

Было бы лучше, если бы вы могли объяснить, что вам нужно более подробно или точно? –

+0

Вам нужна помощь по внедрению методов Step, fast forward и howFar()? –

+0

@sathiyaseelan Мне нужно, чтобы мой первый класс соответствовал всему классу Tester под ним. У моего первого класса есть ошибки. Мой пользователь должен воспроизводить пьяный, поэтому они будут двигаться только в случайных направлениях. Мне нужно двигаться вверх, вниз, влево или вправо. Они должны быть записаны. Запись предназначена для каждого пересечения, на котором я нахожусь. Таким образом, каждый выбор приведет к новой комбинации улиц + авеню. Должен быть вариант, чтобы я мог перемещать определенное количество пересечений по запросу, кроме стандартного. Количество ходов должно быть рассчитано и записано для каждого экземпляра. Спасибо! – Lorber

ответ

1

Таким образом, чтобы следить, начиная пересечения пьяницы,

Вы должны держать переменные экземпляра, как что-то вроде следующих

private int startAvenue; 
private int startStreet; 

и изменить конструктор для сохранения значения startAvenue и StartStreet.

Drunkard(int avenue, int street) { 
    this.startAvenue = avenue; 
    this.startStreet = street; 
} 

Теперь экземпляр пьяницы всегда имеет начальное местоположение.

Теперь мы можем сосредоточиться на шагового метода,

void step(){ 
    int nextMove = rand.nextInt(3); 
    if(nextMove == 0) 
     moveUp(); 
    else if(nextMove == 1) 
     moveDown(); 
    else if(nextMove == 2) 
     moveLeft(); 
    else 
     moveRight(); 
} 

В FastForward(), просто вызовите метод шага() внутри для цикла

void fastForward(int steps) 
{ 
    for (int i=0; i < steps.length; i++}{ 
     step(); 
    } 
} 

В howFar() метод,

int howFar(){ 
    int distance = Math.abs(startAvenue-avenue) + Math.abs(startStreet-street); 
} 
+0

Большое вам спасибо за помощь! Это потрясающе! Одна вещь. Я не могу вычесть проспект или улицу от startAvenue или startStreet в howFar(), потому что они не существуют сейчас. Что вы рекомендуете делать, чтобы создать метод для текущей позиции улицы и проспекта + счетчика? – Lorber

+0

Что вы имеете в виду, их не существует? Я предполагаю, что вы сохраните их как переменную экземпляра. –

+0

Извините, ошибся! Я положил их обратно. Большое вам спасибо! Но я все еще получаю эту последнюю ошибку. Drunkard.java:36: int не может быть разыменован для (int i = 0; i Lorber

Смежные вопросы