Java更改整数在数组中的位置

时间:2018-10-02 20:49:45

标签: java arrays oop netbeans

我必须在数组中引入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 :(得分:1)

如上所述,目标是从以下数组开始:

[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]

更糟糕的是,我们实际上可能会尝试通过尝试使“负的十分之一”元素移至零索引来使程序崩溃。

解决此问题的最佳方法是将我们的问题分解为三个步骤:

  • 将数组中的最后一个数字保存以备后用
  • 对于每个位置,从末尾开始一直回到第二个位置,将数字设置为等于其前一个位置的数字
  • 将数组中的第一个数字设置为保存的“最后一个”数字

这是代码中的样子:

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