Перемещение элементов массива влево и вправо

Таким образом, как часть Vectorкласса, который я пытаюсь создать, я также хочу, чтобы у пользователя была возможность сдвигать элементы в массиве 'n'на несколько мест в зависимости от того, что указано. Если пользователь вводит число, которое больше размера массива, то элементы продолжают смещаться обратно в начало и перемещение. Примером может быть:

 1 2 3 4 (shifted 1) => 4 1 2 3

 1 2 3 4 (shifted 4) => 1 2 3 4

 1 2 3 4 (shifted 5) => 4 1 2 3

У меня не так много кода до сих пор, кроме:

public Vector shifted(int amount) {
  Vector vectorShifted = new Vector(length);

  for (int i = 0; i < length; i++);
    vectorShifted.elements[i] = this.elements[i + amount]
  }
  return vectorShifted;
}

Однако, когда я запускаю эту программу и число больше, чем lengthвведено, отображается ошибка. Есть ли способ изменить этот код в том, что любое число, положительное или отрицательное может быть введено и сдвинуть значения поперек?

1 ответ

  1. Как и сказал lazary2, вы можете использовать оператор modulo %

    Изменение:vectorShifted.elements[i] = this.elements[i + amount]

    кvectorShifted.elements[i] = this.elements[(i + amount) % length]

    Если вы хотите использовать Array:

    Integer[] array = {0,1,2,3,4};
    Collections.rotate(Arrays.asList(array), 3);
    System.out.println(Arrays.toString(array)); //[2, 3, 4, 0, 1]