Java меняет положение целых чисел в массиве - PullRequest
0 голосов
/ 02 октября 2018

Я должен ввести 10 целых чисел в массиве.Например, int A [] = {1,2,3,4,5,6,7,8,9,10}.Затем я должен напечатать массив в обычном порядке, что нормально, и после этого я должен заставить каждый элемент массива перейти к следующей позиции, а последний элемент - к первой позиции.Предполагая, что у нас есть те же самые целые числа в массиве, что и раньше, результат будет следующим: A [] = {10,1,2,3,4,5,6,7,8,9}

Вот мойкод до сих пор, но я получаю ошибку вне границ.Также я не знаю, как перевернуть последний элемент на первую позицию

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int A[] = new int[10];

    System.out.println("Introduce the array numbers");
    for (int i = 0; i < 10; i++) {
        A[i] = sc.nextInt();
    }
    //array in normal order
    for (int i = 0; i < 10; i++) {
        System.out.print("["+A[i]+"]");
    }
    //here i have to print the modified array
    System.out.println("");
    for (int i = 0; i < 10; i++) {
        System.out.print("["+A[i+1]+"]");
    }
}

1 Ответ

0 голосов
/ 03 октября 2018

Как уже говорилось, цель состоит в том, чтобы начать с этого массива:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

И изменить его так, чтобы вы получили следующее:

[10, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Что вы здесь делаетепо сути, толкает каждое число на одну позицию вправо.Самый правый номер, когда «сдвинут на одну точку вправо», будет перенесен на начало массива.

Если мы начнем с того, что просто берем первое число и копируем его вправо, мы запускаемв проблему.Начало массива [1, 2] теперь [1, 1] ... что означает, что мы больше не знаем, какой номер нужно продвинуть в третий слот.Другими словами, если мы просто слепо начинаем с начала массива и толкаем числа вправо, мы получим следующее:

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

Лучший способ решить эту проблему - это сделатьработа начиная с конца массива , а затем работа в обратном направлении.Итак, сначала мы нажимаем 9 вправо, затем 8 и т. Д.

Как только мы это сделаем, единственная проблема - это то, что мы делаем с первой позицией.Если бы мы просто переместили все на единицу, у нас было бы следующее:

[???, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Что еще хуже, мы могли бы фактически вывести программу из строя, пытаясь получить доступ к «отрицательному 1-му» элементу, чтобы переместить его.к нулевому индексу.

Лучший способ обойти this - разбить нашу задачу на три этапа:

  • Сохранить последнее число в массиве дляпозже
  • Для каждой позиции, начиная с конца и возвращаясь ко второй позиции, установите число равным номеру в позиции перед ним
  • Установите первое число в массивена сохраненный «последний» номер

Вот как это выглядит в коде:

int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int last = numbers[numbers.length - 1]; // last now stores 10

// for index 9 to index 1, copy numbers to the right
for (int i = numbers.length - 1; i > 0; --i) {
    numbers[i] = numbers[i - 1];
}

numbers[0] = last; // the first number is now 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...