我必须在数组中引入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]+"]");
}
}
答案 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