Подсчет повторений слов в строке - PullRequest
0 голосов
/ 20 марта 2019

Робот может двигаться в самолете в 4 направлениях: U - вверх, D - вниз, L - влево, R - вправо. Пример трафика - UUDLR, DLRUD. Я должен реализовать метод "прогулки", чтобы он возвращал положение робота после прохождения указанного пути. Итак, я делаю это:

class Main {

static int[] walk(String path) {

int[] A = {0,0};
char charFromPath;

for (int i = 0 ; i < path.length() ; i++) {
      charFromPath = path.charAt(i);
      if(charFromPath == 'U')
      {                           
          A[1]++;
      }
      if(charFromPath == 'D')
      {                           
          A[1]--;
      }
      if(charFromPath == 'L')
      {                           
          A[0]--;
      }
      if(charFromPath == 'R')
      {                           
          A[0]++;
      }
  }
    return A;
}

public static void main(String[] args) {
    {
        String path="UUDLR";
        int[] position = walk(path);

        System.out.println("case 1 - path "+path+ " position 0,1");
        if(position[0]==0 && position[1]==1)
            System.out.println("the robot went right");
      else
            System.out.println("the robot smashed");
    }

    {
        String path="DLRUD";
        int[] position = walk(path);

        System.out.println("\ncase 2 - path "+path+ " position 0,-1");
        if(position[0]==0 && position[1]==-1)
            System.out.println("the robot went right");
        else
            System.out.println("the robot smashed");
    }
}}

Теперь в версии 2 в соответствии с логикой U, D, L, R, команды ВВЕРХ ВНИЗ ВЛЕВО ВПРАВО. Пример трафика - UPUPLEFTRIGHTUP.

Теперь в версии 3 команды, например, 3xUP 2xLEFT DOWN RIGHT. 3xUP означает движение три раза вверх и 2xLEFT 2 раза влево. Добавьте ограничение в движении для робота, он не может выходить за пределы области 10х10 (элемент 10.10 или -10, -10 - последнее действительное значение).

Понятия не имею, как это написать. Как посчитать количество повторений строки в строке?

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Вы можете попробовать что-то вроде

String str = "UPUPLEFTRIGHTUP";
int countUP = ( str.split("UP", -1).length ) - 1;
int countLEFT = ( str.split("LEFT", -1).length ) - 1;
int countRIGHT = ( str.split("RIGHT", -1).length ) - 1;
int countDOWN = ( str.split("DOWN", -1).length ) - 1;

Ограничение можно проверить, сравнив значения int с пределами поля (10*10 в вашем случае).

Для позиции, если предположить, что каждое движение составляет 1 единицу, то:

int x = 0; //starting point in Ox axis
int y = 0; //starting point in Oy axis 
x = countRIGHT - CountLeft;
y = countUP - CountDOWN;

Пара (x,y) - это позиция вашего робота.

функция перемещения:

int[] walk(String path) {
   int[] position = {0,0};
   int countUP = ( path.split("UP", -1).length ) - 1; //Counts how many UP command
   int countLEFT = ( path.split("LEFT", -1).length ) - 1; //Counts how many LEFT command
   int countRIGHT = ( path.split("RIGHT", -1).length ) - 1; //Counts how many RIGHT command
   int countDOWN = ( path.split("DOWN", -1).length ) - 1; //Counts how many DOWN command
   position[0] = countRIGHT - countLEFT;
   position[1] = countUP - countDown;
   return position;
}
1 голос
/ 20 марта 2019

для версии 2 вы можете разделить исходную строку и поместить ее в массив с методом, который вы можете вызвать для строки String [] tmpsplit = tmp.split(" ");.Таким образом, у вашего массива внутри каждой ячейки одно направление (ВВЕРХ, ВНИЗ, ВЛЕВО или ВПРАВО).

Затем вы можете поместить этот массив в аналогичное с тем, которое есть в версии 1. Замените * 1004.* с tmpsplit[i].equals("UP")

...