Java阵列反向逻辑

时间:2019-06-26 10:38:51

标签: arrays loops reverse

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 个答案:

答案 0 :(得分:3)

您可以在这里尝试的一种方法是简单地在中间位置交换数组中的每个元素:

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,然后在每次迭代时递减。但是,我可能会使用上面给出的版本。

答案 1 :(得分:2)

您的代码中存在几个问题:

  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

因为正确交换值,直到达到数据集的一半,然后再交换回去。您将需要半路停下。

答案 2 :(得分:0)

由于没有保存最后一个元素,因此将其设置为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

如果每次都打印出整个字符串,这将很有意义。 由于您在每次迭代中仅打印交换的字符,因此不清楚发生了什么