Java更改整数在数组中的位置
我必须在数组中引入10个整数。例如int A[]={1,2,3,4,5,6,7,8,9,10}。然后我必须以正常的顺序打印数组,这很好,然后我必须让数组的每个元素跳到下一个位置,最后一个元素跳到第一个位置。假设数组中的整数与之前相同,结果是:A[]={10,1,2,3,4,5,6,7,8,9} 这是到目前为止我的代码,但我得到了越界错误。我也不知道如何将最后一个元素翻转到第一个位置Java更改整数在数组中的位置,java,arrays,oop,netbeans,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 =
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]+"]");
}
}
publicstaticvoidmain(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
int A[]=新int[10];
System.out.println(“引入数组编号”);
对于(int i=0;i<10;i++){
A[i]=sc.nextInt();
}
//按正常顺序排列的数组
对于(int i=0;i<10;i++){
系统输出打印(“[”+A[i]+“]);
}
//这里我必须打印修改后的数组
System.out.println(“”);
对于(int i=0;i<10;i++){
系统输出打印(“[”+A[i+1]+“]);
}
}
如上所述,目标是从这个阵列开始:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
并对其进行修改,使您最终得到以下结果:
[10, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
你在这里所做的,本质上,是把每一个头号位置推向右边。当“向右推一个点”时,最右边的数字将环绕到数组的开头
如果我们一开始只是把第一个数字复制到右边,我们就会遇到问题。数组的开头现在是[1,2]
。。。这意味着我们不再知道要把哪个号码推进第三个插槽。换言之,如果我们只是盲目地从数组的开头开始,并将数字向右推,我们将得到以下结果:
[10, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
解决此问题的最佳方法是从数组末尾开始工作,然后向后工作。首先我们把9
推到右边,然后是8
,依此类推
一旦我们这样做了,唯一的问题就是我们如何处理第一个位置。如果我们把所有的东西都移到一个地方,我们会有:
[???, 1, 2, 3, 4, 5, 6, 7, 8, 9]
更糟糕的是,我们可能会尝试访问“负第1个”元素,将其移到零索引,从而导致程序崩溃
最好的解决方法是将问题分为三个步骤:
- 保存阵列中的最后一个数字,以备以后使用
- 对于每个位置,从末端开始,返回到第二个位置,将数字设置为等于其前面位置的数字
- 将数组中的第一个数字设置为保存的“最后一个”数字
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
打印修改后的数组与打印初始数组的代码完全相同。您缺少的是实际修改数组的代码,即存储最后一个值是一个临时变量,将所有其他值复制到右侧1个位置,将存储的“最后一个”值放入第一个位置。