Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java更改整数在数组中的位置_Java_Arrays_Oop_Netbeans - Fatal编程技术网

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

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 =

我必须在数组中引入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]+"]");
    }
}
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个位置,将存储的“最后一个”值放入第一个位置。