Java Array Обратная логика - PullRequest
2 голосов
/ 26 июня 2019
import java.util.Scanner;

public class Reverse {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int arr[] = new int[5];
        System.out.println("Enter the values in the array");
        for (int i = 0; i < arr.length - 1; i++) {
            arr[i] = sc.nextInt();
        }

        for (int i = 0; i < 5; i++) {
            int temp;
            int j = 4;
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
            j--;
            System.out.println(arr[i]);
        }

    }
}

Эта логика не обращает массив целых чисел, почему ?????

вход 123

выход 0123

Ответы [ 3 ]

3 голосов
/ 26 июня 2019

Один из подходов, которые вы можете попробовать здесь, - это просто поменять местами каждый элемент массива по средней позиции:

int[] arr = new int[] {1, 2, 3, 4, 5};
System.out.println(Arrays.toString(arr));
for (int i=0; i < arr.length/2; i++) {
    int temp = arr[i];
    int j = arr.length - i - 1;
    arr[i] = arr[j];
    arr[j] = temp;
}
System.out.println(Arrays.toString(arr));

Это выдает:

[1, 2, 3, 4, 5]
[5, 4, 3, 2, 1]

Проблема с вашей текущей логикойв основном это строка:

int j = 4;

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

2 голосов
/ 26 июня 2019

В вашем коде есть несколько проблем:

  1. Вам нужно инициализировать j перед массивом. Если вы инициализируете его значением 4 внутри массива, то вы всегда поменяете местами последний элемент с i '-ым элементом, а затем уменьшите j.

  2. С i остановкой на arr.length / 2. Представьте себе этот сценарий:

У вас есть следующий набор: 1 2 3 4 5

Если вы пойдете до конца, то это будут состояния:

1 2 3 4 5

5 2 3 4 1

5 4 3 2 1

5 4 3 2 1

1 4 3 2 5

1 2 3 4 5

потому что вы меняете значения правильно до тех пор, пока не достигнете половины набора данных, а затем снова меняете их. Вам нужно будет остановиться на полпути.

0 голосов
/ 26 июня 2019

Поскольку последний элемент не сохранен, он устанавливается на 0. Таким образом, массив, который сохраняется, это 12340, а не 1234

Логика реверсирования неверна, поскольку вы всегда меняете местами последний элемент.

1st iteration - 1 swaps with 0 - New string -> 02341
2nd iteration - 2 swaps with 1 - New string -> 01342
3rd iteration - 3 swaps with 2 - New string -> 01243
4th iteration - 4 swaps with 3 - New string -> 01234

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

...